ファイルアップロード機能のJSP実装
この例では、参考のため、ファイルアップロード機能のJSP実装の具体的なコードを、以下のように共有します。
I. 準備
io.jarパッケージと一緒にfileupload.jarが必要です。完了パスの構築後、続行可能です。
次に、ページセクション
<form action="UploadServlet" method="post" enctype="multipart/form-data">
Academic number:<input type="text" name="sno"/><br/>
Name:<input type="text" name="sname"/><br/>
Upload a photo:<input type="file" name="spicture"/><br/>
<input type="submit" value="register"/>
</form>
注意事項
1. ファイルアップロードは、getメソッドを使用する際に検索ボックスが運べる以上の文字数を転送しないよう、postを使用する必要があります。
2. enctype="multipart.form-data" フィールドを追加する必要があります。
3. "file"は、fileのところで必要です。
III. サーブレット部分
package webtest;
import java.io.File;
import java.io.IOException;
import java.util;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadBase;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
ServletFileUpload; /**
* Servlet implementation class UploadServlet
*/
@WebServlet("/UploadServlet")
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");// request encoding processing, when transferring
response.setCharacterEncoding("utf-8");// response encoding, when transferring
response.setContentType("utf-8");// response encoding, when displaying
boolean isMultipart = ServletFileUpload.isMultipartContent(request);// determine whether there is entype="multipart/form-data" part
if (isMultipart) {
try {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
// set the size of the memory buffer when uploading, and write a temporary file if it exceeds 10kb
((DiskFileItemFactory) factory).setSizeThreshold(10240);//unit byte
//set the temporary file directory to prevent the system from running out of space
((DiskFileItemFactory) factory).setRepository(new File(request.getSession().getServletContext().getRealPath("Uploadtemp")) );// dynamically get the location of the Uploadtemp folder in the project
//control the maximum size of a single file upload 20kb
upload.setSizeMax(20480);//unit byte
List<FileItem> items = upload.parseRequest(request);// parse all request fields in the form and save them in the items
Iterator<FileItem> iter = items.iterator();
while (iter.hasNext()) {
// Parsing is not sequential, so you need to look by name
FileItem item = iter.next();
if (item.isFormField()) { // non-file data
String itemName = item.getFieldName();//Get the name of the non-file range data
if (itemName.equals("sno")) {
int sno = -1;
sno = Integer.parseInt(item.getString("utf-8"));
}
else if (itemName.equals("sname")) {
String sname = null;
sname = item.getString("utf-8");
}
else {
System.out.println("Other fields... ");
}
} else {//File upload
String fileName = item.getName();//Get the file range data. Path and its name
//judge the file type
String ext = fileName.substring(fileName.indexOf(". ") + 1);
if(! (ext.equals("png")||ext.equals("gif")||ext.equals("jpg"))) {
System.out.println("Only png.gif,jpg type files are supported");
return ;
}
String path = request.getSession().getServletContext().getRealPath("Upload");// dynamically get the location of the Upload folder in the project
File file = new File(path,fileName);
item.write(file);//define the upload path, mostly the server path
System.out.println(fileName+"Upload successful");
}
item.delete();//delete the files in the temporary directory
}
}
catch(FileUploadBase.SizeLimitExceededException e) {
System.out.println("Maximum 20KB");
}
catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
注意事項
1. 場所が赤くマークされ、マウスを置いた後にパッケージが見つからない場合、"alt"+"/"のキーの組み合わせを使って、インポートする下の最初のクラスを選択することができます。
2. UploadとUploadtempのファイルがtomcatの対応するプロジェクトの下に格納されている場合、eclipseを通してコードを更新するたびに、eclipse下のコードが直接上書きされるため、2つのフォルダが直接上書きされることになります。eclipseで設定するか、他のフォルダの絶対パス/相対パスで設定してください。
3. 一時ファイルのデータは短時間しか保持されないので、プログラムをハイバネートさせるためにスリープを追加すると、それが見えてしまうかもしれません。item.delete()を使わなくても、セッション全体が終了した後にテンポラリファイルは削除されます。
4. ファイルが見つからないというエラーが報告された場合、Eclipseに付属しているブラウザではなく、Googleの場合はブラウザを使ってやってみてください。
今回は以上です。皆様の学習のお役に立てれば幸いです。そして、スクリプトハウスを応援していただければ幸いです。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン