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を使いましょう。