Commons FileUpload でファイルアップロード

ファイルのアップロードで気をつけることは
「マルチパートということは、ファイル以外の部分もとんでくる」という大前提があり。


やること及び備考

  • ファイルがアップロードされたらそれを元のファイル名でサーバのどっかに保存する
  • 日本語ファイル名とか気にしてない
  • エラー処理とかあんまり考えてない

サーブレットのdoGet一部

// マルチパートかどうか
boolean isMultipart = ServletFileUpload.isMultipartContent(req);

if (isMultipart) {
    // ここらへんはおきまりでせう
    FileItemFactory factory = new DiskFileItemFactory();
    ServletFileUpload upload = new ServletFileUpload(factory);
    List<FileItem> items = upload.parseRequest(req);
    Iterator<FileItem> iter = items.iterator();

    while (iter.hasNext()) {
        FileItem fitem = (FileItem) iter.next();
        if (fitem.isFormField()) {
            // ファイル以外の部分
        } else {
            // ファイルの部分
            // ファイル名を取得。これはローカルのパスが入っている
            String fileName = fitem.getName();
            if (fileName != null && !"".equals(fileName)) {
                // パスをとりのぞいてファイル名だけとるわざ。。こんなのあるらしい
                fileName = (new File(fileName)).getName();
                // ファイルを保存
                fitem.write(new File(fpath + File.separator
                        + fileName));
            }
        }
    }
}

JSP(部分)

<form action="./fileUpload" method="post" enctype="multipart/form-data">
<input type="hidden" name="cmd" value="upload">
ファイル: <input type="file" name="filename" size="40">
<br>
<input type="submit" value="アップロード">
</form>

昔に比べるとずいぶん簡単になったねえ・・