commons FileUpload
JSP,Servletでファイルをアップロードするのに便利なライブラリ。
RFC1867に基づいてrequestをパースしているみたい。
使うときはHTML(JSP)側で、ENCTYPE="multipart/form-data"を指定します。
指定しないとデフォルトのENCTYPE="application/x-www-form-urlencoded"になるのでお忘れなく。
ちなみにServletでrequestを処理するとき、request.getParameter(String name)メソッドを使いますが、これはapplication/x-www-form-urlencoded前提らしく、multi...のときは使えません。ぬるぽ。
以下、簡単なソース
アップロードされたファイルを保存します。
import java.io.File; import java.io.IOException; import java.util.List; 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.FileItemFactory; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class FileUploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; public FileUploadServlet() { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); upload.setFileSizeMax(1024 * 1024); upload.setSizeMax(1024 * 1024); try { List<FileItem> items = (List<FileItem>) upload.parseRequest(request); for (FileItem fileItem : items) { File fileStore = new File("保存先のファイル"); fileItem.write(fileStore); } } catch (FileUploadException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } request.getRequestDispatcher("done.jsp").forward(request, response); } }
http://www.atmarkit.co.jp/fjava/javatips/106jakarta018.html とやってることはほぼ同じですが、DiskFileUploadはすでに非推奨となっているので変わりにServletFileUploadを使いましょう。