Top / Java / Jakarta Commons / FileUploadを使う

Commons FileUpload? パッケージは、サーブレットなどWEB環境にファイルアップロード機能を実装したいときに使用します。

ダウンロード

http://ftp.kddilabs.jp/infosystems/apache/jakarta/commons/fileupload/binaries/ よりダウンロードできます。2007/02/24現在の最新版はcommons-fileupload-1.2-bin.tar.gzです。また、Dependenciesを見るとcommons-ioが必要みたいですね。

やってみる

 protected void doPost(HttpServletRequest request,
     HttpServletResponse response) throws ServletException, IOException {
   // Create a factory for disk-based file items
   DiskFileItemFactory factory = new DiskFileItemFactory();
   // Set factory constraints
   factory.setSizeThreshold(4096);
   // factory.setRepository(new File("/tmp"));
   // Create a new file upload handler
   ServletFileUpload upload = new ServletFileUpload(factory);

   // Set overall request size constraint
   upload.setSizeMax(-1);
   // Parse the request
   try {
     List<FileItem> items = upload.parseRequest(request); <-パラメタのList
     for (FileItem item : items) {
       System.out.println("item: " + item);
       if (item.isFormField()) {
         processFormField(item);
       } else {
         processUploadedFile(item);
       }
     }
   } catch (FileUploadException e) {
     e.printStackTrace();
   }
 }

 private void processFormField(FileItem item) {
   String name = item.getFieldName();
   String value = item.getString();
   System.out.println(name + " : " + value);
 }

 private void processUploadedFile(FileItem item) {
   File uploadedFile = new File("c:/", item.getName());
   try {
     item.write(uploadedFile); //ファイル書き込み
   } catch (Exception e) {
     e.printStackTrace();
   }
 }

このように、

List<FileItem> items = upload.parseRequest(request);

このメソッドを呼ぶことで、parameterとそのvalueの対のFileItem?を取得できます*1。あとはこのFileItem?を使って

File uploadedFile = new File("c:/", item.getName());
try {
    item.write(uploadedFile);
} catch (Exception e) {
    e.printStackTrace();
}

とすることでファイルを書き出すことができます。

ファイルをバイト列のまま取得する

byte[] data = item.get();

でファイルをバイト列のまま取得することもできます。

関連リンク


この記事は

選択肢 投票
おもしろかった 11  
そうでもない 6  

Top / Java / Jakarta Commons / FileUploadを使う

現在のアクセス:14826


*1 item.isFormField?()だったら普通のパラメタ。そうでなかったらアップロードファイル

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-11-16 (水) 16:22:02 (2921d)