Jsp-file-uploading
JSP-ファイルのアップロード
この章では、JSPでのファイルのアップロードについて説明します。 JSPをHTMLフォームタグとともに使用して、ユーザーがファイルをサーバーにアップロードできるようにすることができます。 アップロードされるファイルは、テキストファイル、バイナリファイル、画像ファイル、または単なるドキュメントです。
ファイルアップロードフォームの作成
ファイルアップロードフォームの作成方法を理解しましょう。 次のHTMLコードは、アップローダーフォームを作成します。 以下は、注意すべき重要な点です-
- フォームの method 属性は POST methodに設定する必要があり、GETメソッドは使用できません。
- フォームの enctype 属性は multipart/form-data に設定する必要があります。
- フォームの action 属性は、バックエンドサーバーでのファイルのアップロードを処理するJSPファイルに設定する必要があります。 次の例では、 uploadFile.jsp プログラムファイルを使用してファイルをアップロードしています。
- 単一のファイルをアップロードするには、属性 type = "file" を持つ単一の <input …/> タグを使用する必要があります。 複数のファイルのアップロードを許可するには、name属性に異なる値を持つ複数の入力タグを含めます。 ブラウザは、それぞれに[参照]ボタンを関連付けます。
<html>
<head>
<title>File Uploading Form</title>
</head>
<body>
<h3>File Upload:</h3>
Select a file to upload: <br/>
<form action = "UploadServlet" method = "post"
enctype = "multipart/form-data">
<input type = "file" name = "file" size = "50"/>
<br/>
<input type = "submit" value = "Upload File"/>
</form>
</body>
</html>
これにより、次の結果が表示されます。 これで、ローカルPCからファイルを選択でき、ユーザーが[ファイルのアップロード]をクリックすると、選択したファイルとともにフォームが送信されます-
File Upload −
Select a file to upload −
注-上記のフォームは単なるダミーフォームであり、動作しません。マシンで動作するようにするには、上記のコードを試してください。
バックエンドJSPスクリプトの作成
アップロードされたファイルが保存される場所を定義しましょう。 あなたのプログラムでこれをハードコーディングするか、このディレクトリ名は、次のようにweb.xmlの context-param 要素などの外部構成を使用して追加することもできます-
<web-app>
....
<context-param> <description>アップロードされたファイルを保存する場所</description> <param-name> file-upload </param-name> <param-value> c:\ apache-tomcat-5.5.29 \ webapps \ data \ </param-value> </context-param>
....
</web-app>
以下は UploadFile.jsp のソースコードです。 これにより、一度に複数のファイルのアップロードを処理できます。 ファイルのアップロードに進む前に、次のことを考慮しましょう。
- 次の例は FileUpload に依存しています。クラスパスに commons-fileupload.x.x.jar ファイルの最新バージョンがあることを確認してください。 [[1]]
- FileUploadはCommons IOに依存しています。クラスパスに commons-io-x.x.jar ファイルの最新バージョンがあることを確認してください。 [[2]]
- 次の例をテストするときは、_maxFileSize_よりも小さいサイズのファイルをアップロードする必要があります。アップロードしない場合、ファイルはアップロードされません。
- 事前にディレクトリ c:\ temp および c:\ apache-tomcat5.5.29 \ webapps \ data を作成したことを確認してください。
<%@ page import = "java.io.*,java.util.*, javax.servlet.*" %>
<%@ page import = "javax.servlet.http.*" %>
<%@ page import = "org.apache.commons.fileupload.*" %>
<%@ page import = "org.apache.commons.fileupload.disk.*" %>
<%@ page import = "org.apache.commons.fileupload.servlet.*" %>
<%@ page import = "org.apache.commons.io.output.*" %>
<%
File file ;
int maxFileSize = 5000 *1024;
int maxMemSize = 5000* 1024;
ServletContext context = pageContext.getServletContext();
String filePath = context.getInitParameter("file-upload");
//Verify the content type
String contentType = request.getContentType();
if ((contentType.indexOf("multipart/form-data") >= 0)) {
DiskFileItemFactory factory = new DiskFileItemFactory();
//maximum size that will be stored in memory
factory.setSizeThreshold(maxMemSize);
//Location to save data that is larger than maxMemSize.
factory.setRepository(new File("c:\\temp"));
//Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
//maximum file size to be uploaded.
upload.setSizeMax( maxFileSize );
try {
//Parse the request to get file items.
List fileItems = upload.parseRequest(request);
//Process the uploaded file items
Iterator i = fileItems.iterator();
out.println("<html>");
out.println("<head>");
out.println("<title>JSP File upload</title>");
out.println("</head>");
out.println("<body>");
while ( i.hasNext () ) {
FileItem fi = (FileItem)i.next();
if ( !fi.isFormField () ) {
//Get the uploaded file parameters
String fieldName = fi.getFieldName();
String fileName = fi.getName();
boolean isInMemory = fi.isInMemory();
long sizeInBytes = fi.getSize();
//Write the file
if( fileName.lastIndexOf("\\") >= 0 ) {
file = new File( filePath +
fileName.substring( fileName.lastIndexOf("\\"))) ;
} else {
file = new File( filePath +
fileName.substring(fileName.lastIndexOf("\\")+1)) ;
}
fi.write( file ) ;
out.println("Uploaded Filename: " + filePath +
fileName + "<br>");
}
}
out.println("</body>");
out.println("</html>");
} catch(Exception ex) {
System.out.println(ex);
}
} else {
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet upload</title>");
out.println("</head>");
out.println("<body>");
out.println("<p>No file uploaded</p>");
out.println("</body>");
out.println("</html>");
}
%>
次に、上記で作成したHTMLフォームを使用してファイルをアップロードしてみます。 http://localhost:8080/UploadFile を実行すると、次の結果が表示されます。 これは、ローカルマシンからファイルをアップロードするのに役立ちます。
File Upload −
Select a file to upload −
JSPスクリプトが正常に機能する場合、ファイルは c:\ apache-tomcat5.5.29 \ webapps \ data \ ディレクトリにアップロードする必要があります。