「Java/Tomcat/ファイルをアップロードするサンプル(Commons FileUplaod)」の編集履歴(バックアップ)一覧はこちら

Java/Tomcat/ファイルをアップロードするサンプル(Commons FileUplaod)」(2024/03/29 (金) 16:37:35) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

Tomcat7でアップロードされたファイルを取得するには、Commons FileUploadを利用します。 Commons FileUploadを利用しない場合、かなり面倒なプログラムを組む必要があると思いますが、Commons FileUploadを使えばかなり簡単にアップロードしたファイルを取得出来ます。 * ■目次 #contents(fromhere=true) *前提条件 Tomcat7 JDK1.6 Commons FileUpload 1.3 Commons IO 2.4 * ライブラリの準備 ** Commons FileUpload - http://commons.apache.org/proper/commons-fileupload/ Commons FileUploadを上記のアドレスからダウンロードします。 今回は「commons-fileupload-1.3-bin.zip」をダウンロードしました。 ダウンロード出来たら「commons-fileupload-1.3-bin.zip」の中から「commons-fileupload-1.3.jar」を取り出し、プロジェクトの「/WEB-INF/lib」ディレクトリに配置します。 eclipse等IDEでも「commons-fileupload-1.3.jar」をビルドパスに追加しましょう。 追加しないとコンパイルエラーが出ます。 ** Commons IO - http://commons.apache.org/proper/commons-io/ Commons IOも上記のアドレスからダウンロードしましょう。 今回は「commons-io-2.4-bin.zip」をダウンロードしました。 ダウンロード出来たら「commons-io-2.4-bin.zip」の中から「commons-io-2.4.jar」を取り出し、プロジェクトの「/WEB-INF/lib」ディレクトリに配置します。 こちらはIDEのビルドパスに追加しなくても大丈夫です。Commons FileUploadが内部的に使っているからコンパイルするだけなら不要なのです。 * サンプルアプリ ** &ref(web.xml)の設定 #highlight(){{ <?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <!-- サーブレットの宣言 --> <servlet> <servlet-name>FileUploadSample</servlet-name> <servlet-class>FileUploadSample</servlet-class> </servlet> <!-- サーブレットとurlのマッピング --> <servlet-mapping> <servlet-name>FileUploadSample</servlet-name> <url-pattern>/up</url-pattern> </servlet-mapping> </web-app> }} - web.xmlは特に代わり映えはしません。 ** サンプルJSP &ref(index.jsp) #highlight(){{ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>[Tomcat] ファイルアップロードサンプル。</title> </head> <body> <h1>[Tomcat] ファイルアップロードサンプル。</h1> <form method="POST" enctype="multipart/form-data" action="up"> ファイル : <input type="file" name="upfile"><br/> メモ : <input type="text" name="note"><br/> <br/> <input type="submit" value="Press"> ファイルをアップロードします! </form> </body> </html> }} - ファイルをアップロードする時は、formタグのメソッドを「POST」、enctypeを「multipart/form-data」にします。 - JSPファイルになっていますが、JSPである必要性のないJSPファイルになってしまいました。 ** サンプルサーブレット &ref(FileUploadSample.java) #highlight(){{ import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.List; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; /** * [Tomcat] ファイルアップロードサンプル。 */ public class FileUploadSample extends HttpServlet { // (1) ファイルアップロードする時は、doPostメソッドを使います。 @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // (2) アップロードファイルを受け取る準備 // ディスク領域を利用するアイテムファクトリーを作成 DiskFileItemFactory factory = new DiskFileItemFactory(); // tempディレクトリをアイテムファクトリーの一次領域に設定 ServletContext servletContext = this.getServletConfig().getServletContext(); factory.setRepository((File) servletContext.getAttribute("javax.servlet.context.tempdir")); // ServletFileUploadを作成 ServletFileUpload upload = new ServletFileUpload(factory); try { // (3) リクエストをファイルアイテムのリストに変換 List<FileItem> items = upload.parseRequest(request); // アップロードパス取得 String upPath = servletContext.getRealPath("/") + "upload/"; byte[] buff = new byte[1024]; int size = 0; for (FileItem item : items) { // (4) アップロードファイルの処理 if (!item.isFormField()) { // ファイルをuploadディレクトリに保存 BufferedInputStream in = new BufferedInputStream(item.getInputStream()); File f = new File(upPath + item.getName()); BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(f)); while ((size = in.read(buff)) > 0) { out.write(buff, 0, size); } out.close(); in.close(); // アップロードしたファイルへのリンクを表示 response.getWriter().print("<a href='"); response.getWriter().print(servletContext.getContextPath() + "/upload/" + item.getName()); response.getWriter().print("'>" + item.getName() + "</a>"); // (5) フォームフィールド(ファイル以外)の処理 } else { // ここでは処理せず、直接requestからgetParamしてもいいと思います。 } } } catch (FileUploadException e) { // 例外処理 } response.getWriter().flush(); } } }} *** サンプルサーブレットのポイント - 1.ファイルアップロードする時は、doPostメソッドを使います。 -- htmlの方でメソッドを「POST」にした場合、Servletで受け取る時は「doPost」になります。 - 2.アップロードファイルを受け取る準備 -- 特に説明することもないと思います。 -- オブジェクト作ったり、ファイルの一時領域を設定してます。 - 3.リクエストをファイルアイテムのリストに変換 -- List<FileItem> items = upload.parseRequest(request); --- ここでリクエストをファイルアイテムのリストに変換しています。 - 4.アップロードファイルの処理 -- ここでは、アップロードされたファイルやパラメータの処理を行います。 -- 「FileItem.isFormField()」このメソッドでfalseが返って来たらファイルだと思っていいです。 --- trueだったら、ファイル以外のフォームフィールドです。 -- 今回行なっているのは、アップロードされたファイルを「/upload/~」にコピーして、コピー先へのリンクを表示する処理です。 - 5.フォームフィールド(ファイル以外)の処理 -- ここでは、ファイル以外のフィールドの処理を記述します。 -- 今回は、「フィールド名 : 値」を表示するだけの簡単な処理にしてあります。 * サンプルダウンロード &ref(web.xml) &ref(index.jsp) &ref(FileUploadSample.java) * コメント(バグ、間違い、こんな情報が欲しい等ありましたら) #pcomment(reply) * アンケート(このページの情報はお役に立ちましたか?) #tvote("役に立った[51]","役に立たない[8]","分かりにくい[12]","間違っている[4]","ありがとう[22]","今日の晩飯は、カレー[136]","はらへった[16]","3[3]","お腹の肉が気になる[22]","私は神だ!!![13]","227[3]","&lt;script&gt;&lt;/script&gt;[2]","https://w.atwiki.jp/chapati4it/pages/154.html[1]","わかりやすかったですが、ソースコード箇所のファストビューの情報量を増やしてもらえるともっとみやすかったです。[2]")
Tomcat7でアップロードされたファイルを取得するには、Commons FileUploadを利用します。 Commons FileUploadを利用しない場合、かなり面倒なプログラムを組む必要があると思いますが、Commons FileUploadを使えばかなり簡単にアップロードしたファイルを取得出来ます。 * ■目次 #contents(fromhere=true) *前提条件 Tomcat7 JDK1.6 Commons FileUpload 1.3 Commons IO 2.4 * ライブラリの準備 ** Commons FileUpload - http://commons.apache.org/proper/commons-fileupload/ Commons FileUploadを上記のアドレスからダウンロードします。 今回は「commons-fileupload-1.3-bin.zip」をダウンロードしました。 ダウンロード出来たら「commons-fileupload-1.3-bin.zip」の中から「commons-fileupload-1.3.jar」を取り出し、プロジェクトの「/WEB-INF/lib」ディレクトリに配置します。 eclipse等IDEでも「commons-fileupload-1.3.jar」をビルドパスに追加しましょう。 追加しないとコンパイルエラーが出ます。 ** Commons IO - http://commons.apache.org/proper/commons-io/ Commons IOも上記のアドレスからダウンロードしましょう。 今回は「commons-io-2.4-bin.zip」をダウンロードしました。 ダウンロード出来たら「commons-io-2.4-bin.zip」の中から「commons-io-2.4.jar」を取り出し、プロジェクトの「/WEB-INF/lib」ディレクトリに配置します。 こちらはIDEのビルドパスに追加しなくても大丈夫です。Commons FileUploadが内部的に使っているからコンパイルするだけなら不要なのです。 * サンプルアプリ ** &ref(web.xml)の設定 #highlight(){{ <?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <!-- サーブレットの宣言 --> <servlet> <servlet-name>FileUploadSample</servlet-name> <servlet-class>FileUploadSample</servlet-class> </servlet> <!-- サーブレットとurlのマッピング --> <servlet-mapping> <servlet-name>FileUploadSample</servlet-name> <url-pattern>/up</url-pattern> </servlet-mapping> </web-app> }} - web.xmlは特に代わり映えはしません。 ** サンプルJSP &ref(index.jsp) #highlight(){{ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>[Tomcat] ファイルアップロードサンプル。</title> </head> <body> <h1>[Tomcat] ファイルアップロードサンプル。</h1> <form method="POST" enctype="multipart/form-data" action="up"> ファイル : <input type="file" name="upfile"><br/> メモ : <input type="text" name="note"><br/> <br/> <input type="submit" value="Press"> ファイルをアップロードします! </form> </body> </html> }} - ファイルをアップロードする時は、formタグのメソッドを「POST」、enctypeを「multipart/form-data」にします。 - JSPファイルになっていますが、JSPである必要性のないJSPファイルになってしまいました。 ** サンプルサーブレット &ref(FileUploadSample.java) #highlight(){{ import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.List; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; /** * [Tomcat] ファイルアップロードサンプル。 */ public class FileUploadSample extends HttpServlet { // (1) ファイルアップロードする時は、doPostメソッドを使います。 @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // (2) アップロードファイルを受け取る準備 // ディスク領域を利用するアイテムファクトリーを作成 DiskFileItemFactory factory = new DiskFileItemFactory(); // tempディレクトリをアイテムファクトリーの一次領域に設定 ServletContext servletContext = this.getServletConfig().getServletContext(); factory.setRepository((File) servletContext.getAttribute("javax.servlet.context.tempdir")); // ServletFileUploadを作成 ServletFileUpload upload = new ServletFileUpload(factory); try { // (3) リクエストをファイルアイテムのリストに変換 List<FileItem> items = upload.parseRequest(request); // アップロードパス取得 String upPath = servletContext.getRealPath("/") + "upload/"; byte[] buff = new byte[1024]; int size = 0; for (FileItem item : items) { // (4) アップロードファイルの処理 if (!item.isFormField()) { // ファイルをuploadディレクトリに保存 BufferedInputStream in = new BufferedInputStream(item.getInputStream()); File f = new File(upPath + item.getName()); BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(f)); while ((size = in.read(buff)) > 0) { out.write(buff, 0, size); } out.close(); in.close(); // アップロードしたファイルへのリンクを表示 response.getWriter().print("<a href='"); response.getWriter().print(servletContext.getContextPath() + "/upload/" + item.getName()); response.getWriter().print("'>" + item.getName() + "</a>"); // (5) フォームフィールド(ファイル以外)の処理 } else { // ここでは処理せず、直接requestからgetParamしてもいいと思います。 } } } catch (FileUploadException e) { // 例外処理 } response.getWriter().flush(); } } }} *** サンプルサーブレットのポイント - 1.ファイルアップロードする時は、doPostメソッドを使います。 -- htmlの方でメソッドを「POST」にした場合、Servletで受け取る時は「doPost」になります。 - 2.アップロードファイルを受け取る準備 -- 特に説明することもないと思います。 -- オブジェクト作ったり、ファイルの一時領域を設定してます。 - 3.リクエストをファイルアイテムのリストに変換 -- List<FileItem> items = upload.parseRequest(request); --- ここでリクエストをファイルアイテムのリストに変換しています。 - 4.アップロードファイルの処理 -- ここでは、アップロードされたファイルやパラメータの処理を行います。 -- 「FileItem.isFormField()」このメソッドでfalseが返って来たらファイルだと思っていいです。 --- trueだったら、ファイル以外のフォームフィールドです。 -- 今回行なっているのは、アップロードされたファイルを「/upload/~」にコピーして、コピー先へのリンクを表示する処理です。 - 5.フォームフィールド(ファイル以外)の処理 -- ここでは、ファイル以外のフィールドの処理を記述します。 -- 今回は、「フィールド名 : 値」を表示するだけの簡単な処理にしてあります。 * サンプルダウンロード &ref(web.xml) &ref(index.jsp) &ref(FileUploadSample.java) * コメント(バグ、間違い、こんな情報が欲しい等ありましたら) #pcomment(reply) * アンケート(このページの情報はお役に立ちましたか?) #tvote("役に立った[52]","役に立たない[8]","分かりにくい[12]","間違っている[4]","ありがとう[22]","今日の晩飯は、カレー[136]","はらへった[16]","3[3]","お腹の肉が気になる[22]","私は神だ!!![13]","227[3]","&lt;script&gt;&lt;/script&gt;[2]","https://w.atwiki.jp/chapati4it/pages/154.html[1]","わかりやすかったですが、ソースコード箇所のファストビューの情報量を増やしてもらえるともっとみやすかったです。[2]")

表示オプション

横に並べて表示:
変化行の前後のみ表示: