JSP は、HTML フォームを通じてファイルをサーバーにアップロードできます。 ファイルの種類は、テキスト ファイル、バイナリ ファイル、画像ファイル、またはその他のドキュメントです。
次に、HTML タグを使用してファイル アップロード フォームを作成します。次の点に注意してください。
フォームメソッド属性はPOSTメソッドに設定する必要があり、GETメソッドは使用できません。
フォームの enctype 属性を multipart/form-data に設定する必要があります。
フォーム アクション属性は、ファイル アップロードのためにバックグラウンドで送信された JSP ファイル アドレスに設定する必要があります。たとえば、uploadFile.jsp プログラム ファイルは、アップロードされたファイルを処理するために使用されます。
ファイル要素をアップロードするには、<input .../> タグを使用し、属性を type="file" に設定する必要があります。複数のファイルをアップロードする必要がある場合は、<input .../> タグに別の名前を設定できます。
ファイルをアップロードするためのフォームの例は次のとおりです。
<html><head><title>ファイル アップロード フォーム</title></head><body><h3>ファイル アップロード:</h3>アップロードするファイルを選択してください:<br /><form action="UploadServlet" Method="post" enctype="multipart/form-data"><input type="file" name="file" size="50" /><br /><input type="submit" value="ファイルのアップロード" /></form></body></html>ローカル ブラウザでファイルにアクセスします。表示インターフェイスは次のとおりです。[ファイルのアップロード] をクリックすると、アップロードするファイルを選択できるウィンドウが表示されます。
まず、アップロード後にファイルがサービス上に保存される場所を定義します。プログラムにパスを記述することも、web.xml で context-param 要素を設定してファイルが保存されるディレクトリを設定することもできます。構成ファイルは次のように表示されます。
<web-app>....<context-param> <description>ファイルアップロードアドレス</description> <param-name>file-upload</param-name> <param-value> c:apache-tomcat- 5.5.29webappsdata </param-value> </context-param>....</web-app>
次のスクリプト ファイル UploadFile.jsp は、アップロードされた複数のファイルを処理できます。このスクリプトを使用する前に、次の点に注意する必要があります。
次の例は FileUpload に依存しているため、最新のcommons-fileupload.xxjarパッケージ ファイルをクラスパスに導入する必要があります。 ダウンロード アドレスは、http://commons.apache.org/fileupload/ です。
FileUpload は Commons IO に依存しているため、最新のcommons-io-xxjar をクラスパスに導入する必要があります。 ダウンロード アドレスは http://commons.apache.org/io/ です。
次の例をテストするときは、アップロードして、アップロードされたファイルのサイズがmaxFileSize変数で設定されたサイズより小さいことを確認する必要があります。そうでない場合、ファイルは正常にアップロードできません。
ディレクトリ c:temp および c:apache-tomcat-5.5.29webappsdata が作成されていることを確認してください。
<%@ page import="java.io.*,java.util.*, javax.servlet.*" %><%@ page import="javax.servlet.http.*" %><%@ page import= "org.apache.commons.fileupload.*" %><%@ ページ import="org.apache.commons.fileupload.disk.*" %><%@ ページimport="org.apache.commons.fileupload.servlet.*" %><%@ page import="org.apache.commons.io.output.*" %><% ファイル ファイル; int maxFileSize = 5000 * 1024; int maxMemSize = 5000 * 1024; ServletContext context = pageContext.getServletContext(); context.getInitParameter("file-upload"); // アップロードされたコンテンツのタイプを確認します String contentType = request.getContentType(); if ((contentType.indexOf("multipart/form-data") >= 0)) { DiskFileItemFactory Factory = new DiskFileItemFactory(); // メモリに保存されるファイルの最大サイズを設定します。ローカルに保存されたデータが maxMemSize を超えています。factory.setRepository(new File("c:\temp")); // 新しいファイル アップロード ハンドラーを作成します。upload = new ServletFileUpload(factory); // アップロードされるファイルの最大サイズを設定します。 Upload.setSizeMax( maxFileSize ); // 取得したファイルを解析します。 List fileItems = Upload.parseRequest(request);アップロードされたファイルの処理 Iterator i = fileItems.iterator(); out.println("<head>"); out.println("<title>JSP ファイルのアップロード</title> " ); out.println("</head>"); out.println("<body>"); ( i.hasNext () ) { FileItem fi = (FileItem)i.next(); if ( !fi.isFormField () ) { // アップロードされたファイルのパラメータを取得します String fieldName = fi.getName(); .isInMemory (); long sizeInBytes = fi.getSize(); // ファイルに書き込みます 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("アップロードされたファイル名: " + ファイルパス + ファイル名 + "<br>"); out.println("</body>"); out.println("</html>"); }catch(Exception ex) { System.out.println(ex) }else{ out.println("< html>"); out.println("<head>"); out.println("<title>サーブレットのアップロード</title>"); out.println("</head>"); out.println("<body>"); out.println("<p>ファイルがアップロードされていません</p>"); out.println("</html>) "); }%>
次に、ブラウザからhttp://localhost:8080/UploadFile.htmにアクセスし、ファイルをアップロードします。
JSP スクリプトが正常に実行されると、ファイルは c:apache-tomcat-5.5.29webappsdata にアップロードされます。フォルダーを開いて、アップロードが成功したかどうかを確認できます。