2007-01-04

Webでの複数ファイルアップロード

ファイルを一括でフォームからアップロードする方法のひとつとして zipに固めて送信するというのがある。

ありがたいことに Windows XPでは ZIPフォルダが標準装備。
たまに、ソレを知らず変なZIPアーカイバをインストールしちゃってXPの標準機能を殺しちゃってる人(Win95あたりからのユーザに多い)も見かけるが、そういう人を目覚めさせる UIとして是非どうぞ。

但し、ファイルアップロードのフィールドがいっぱい並んでるような不細工で必要クリック数のやたら多いフォームや、テンポラリファイルとセッションを使ってショッピングカートみたいに繰り返し操作で追加アップロードしていく状態数過剰なUIを選択せざるを得ない場合を除く。

添付のJavaによるサンプルは、ZIPで固めた複数のエクセルファイルを InputStreamで受け取って、適当なオブジェクトの Collectionを返す Beanである ZippedXlsInputStreamExtractorと、エクセルファイルをPOIのHSSFWorkbookオブジェクトとして受け取ってやっぱ適当なオブジェクトの Collectionを返すインターフェイスの定義である XlsExtractor。

XlsExtractorを適当に実装したものを ZippedXlsInputStreamExtractorにインジェクトしといて、commons-fileuploadなりなんなりで得た InputStreamを extractメソッドに渡してやると ZIPファイル内のエクセルファイルが順次 XlsExtractor(の実装)によって処理され、結果セットがめでたく Collectionで返る。はず。

java.util.zip.ZipInputStream, org.apache.poi.hssf.usermodel.HSSFWorkbookを使用。



ZippedXlsInputStreamExtractor.zip

追記・・・Windowsの場合、ZIPファイルに含まれるエントリのファイル名に日本語が含まれるとZipInputStreamのエラーで正常動作しない。MacOSXだとUTF-8で格納されるので大丈夫。WindowsはいつシフトJISやめてくれるのかな。

2 件のコメント:

Blogger Yasushi さんは書きました...

厳密にはzipのファイル名にエンコードの規定はない、のでmacもwinも正解。だったはず。

utf-8なzipファイルが、javaで正常に使えるのは、jarの仕様を適用してるためと思われ。jarには格納するエントリ名がUTF-8にすることになってる。

あとwinでzipフォルダをとめる理由は大量のzipファイルを1つのフォルダにおいて、explorerのツリービューを見たときに止めたくなると思う。
zipfldr.dllを停止してもzipの作成は可能だしね。


ところで疑問だったんだけど、zipで固めるのは手動?。submit時に自動できるUIがあるのかと期待したんだけど。

2007/01/06 1:53  
Blogger shimarin さんは書きました...

zipで固めるのは手動。
それ自体既に直感的なUIでできるのでそれ以上どうこうする必要はないから。

2007/01/06 10:47  

コメントを投稿

<< ホーム