日常

ケ・セラ・セラ

Java で input type="file" アップロード

input type="file" のファイルをアップロードする時、java だと org.apache.commons.fileupload.servlet.ServletFileUpload とか使うと思います。

以下の具合に、 getName() の取得結果が IE だけ違ったので少し悲しくなりました。

<input type="file" id="files" name="files">
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(-1);
List<?> items = upload.parseRequest(request);
for (Object val : items) {
  FileItem item = (FileItem) val;

  // IE だけフルパスで取れるんだけど、、、
  // chrome, firefox はファイル名のみ
  String fileName = item.getName();

  if (!item.isFormField()) {
    if ((fileName != null) && (!fileName.equals(""))) {

      // IE の場合 ファイル名だけ抜き出すなど
      Integer ie = fileName.lastIndexOf("\\");
      if (ie > 0) {
        fileName = fileName.substring(ie);
      }

      item.write(new File(upDir + "/" + fileName));
    }
  }
}