作成 2003/2/19
FileUploadはWebでブラウザからFileをアップロードするライブラリです。
ファイルのアップロード処理を自分で実装すると、 いろいろめんどくさいらしいですが、 FileUploadを使うとサクッとアップロードできます。
upload用のサーブレットとJSPです。
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
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.FileUpload;
/**
* FileUploadの練習
*/
public class HogeSrv extends HttpServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
try {
FileUpload fu = new FileUpload();
fu.setSizeMax(1000000);
fu.setSizeThreshold(4096);
fu.setRepositoryPath("/tmp");
List fileItems = fu.parseRequest(req);
Iterator iter = fileItems.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
System.out.println(item.getFieldName());
if (item.isFormField()) {
System.out.println("普通のフィールドっす");
} else {
System.out.println("ファイルっす");
String path = getServletContext().getRealPath("");
String clientPath = item.getName();
String fileName = new File(clientPath).getName();//←本当はこれはダメ
String saveRoot = getServletContext().getRealPath("file");
File dir = new File(saveRoot);
File file = new File(dir, fileName);
item.write(file.getAbsolutePath());
}
}
} catch (Exception e) {
e.printStackTrace();
throw new ServletException(e);
}
}
}
<html> <body> <h2>TEST</h2> <form name="uploadForm" action="servlet/HogeSrv" method="POST" enctype="multipart/form-data"> <input type="file" name="file1"> <br><input type="file" name="file2"> <br><input type="text" name="text1"> <br><input type="submit"> </form> </body> </html>
なんちゅうかサンプルそのままですね。。。
ファイルを取得した後は、Webアプリ以下のfileディレクトリに書いてます。 DBに書くなり、パースして捨てるなりいろいろするんでしょう。 上の例だと同じファイル名が上書きされます。
strutsのFormFileとかまるごとCommonsに行ったのかと思ってましたが、 アップロードのパース処理部分だけみたいですね。
いつの間にか日本語ファイル名もちゃんと読めるようになってるようです。