Archive for 2010年3月11日
Servlet 3.0 File Upload 機能
Servlet 3.0 ではマルチパートデータを扱う事ができるようになったため、とても簡単にファイルアップロード機能を実現できます。
(表示用 HTML)
<html> <head> <meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″> <title>JSP Page</title> </head> <body> <FORM action=”/FileUpload/MyFileUpload” enctype=”multipart/form-data” method=”POST”> アップロードするファイル名: <INPUT type=”file” name=”content”> <INPUT type=”submit” value=”Submit”> </FORM> </body> </html> |
アップロードしたファイル名を取得するためには、getFilename() メソッドで実装しているように、ヘッダ:Content-Disposition の内容を取得しファイル名を抽出します。Content-Disposition ヘッダは下記のような値を含みますので、filename の部分を取得します。
Content-Disposition: form-data; name=”content”; filename=”FILE_NAME” |
また、@MultipartConfig のアノテーションを使用して、アップロードするファイルの上限や、配置場所等を設定します。
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.MultipartConfig; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.Part; @WebServlet(name=”MyFileUpload”, urlPatterns={“/MyFileUpload”}) @Override private String getFilename(Part part) { |
簡単なメモ書き程度ですが、簡単にファイルアップロード機能を実装できる事が
お分かり頂けるかと思います。
本当は、Async Servlet を使って時間のかかるアップロード処理を非同期で
実現するコードも紹介したいのですが、一部動作がおかしく調査中ですので、
後日うまくいけば、ここに追記します。