- - PR -
複数ファイルのダウンロード
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-01-20 17:33
お世話になっております。
初歩的な質問で申し訳ありませんが アドバイスをお願いいたします。 ファイルのダウンロードを実行しようとしています。 JSPのforループ内で <INPUT TYPE="checkbox" NAME="file_list" VALUE="<%= aryFileList[i].getName() %>"> を繰り返し、ディレクトリ内のファイル一覧とチェックボックスが表示されます。 SubmitされるとHttpServlet継承クラスにおけるdoGetメソッドで チェックの入ったファイルの名前が配列に収容されます。 String[] fileNames_ = request.getParameterValues("file_list"); 当該Servlet内では、この後次のように処理します。 for ( int i = 0 ; i < fileNames_.length ; i ++ ) { String fileName_ = fileNames_[i]; // Unicodeに変更 String fileName = new String(fileName_.getBytes("ISO-8859-1"), "JISAutoDetect"); // ContentType出力 response.setContentType("text/plain"); // ファイル名の送信 response.setHeader("Content-disposition", "attachment; filename = \"" + fileName + "\""); // ファイル内容の出力 ServletOutputStream out = response.getOutputStream(); FileInputStream fin = new FileInputStream(OUTPUT_PATH + fileName); int size; while (( size = fin.read(buffer)) != -1 ) { out.write(buffer, 0, size); } fin.close(); fin = null; out.close(); out = null; fileName = null; fileName_ = null; } 本来は、チェックの入っている回数だけ「ファイルのダウンロード」ダイアログを表示させ 保存ディレクトリを決定したいのですが、 この書き方ですと、例えば2つのファイルにチェックが入っていた場合 2回ループはしますが、そのダイアログが表示されるのはループを抜けてからのため 1つ目のファイルしか保存できません。 チェックを複数入れた場合に複数回そのダイアログを表示させるにはどうすべきかアドバイスをお願いいたします。 | ||||
|
投稿日時: 2006-01-20 17:45
同じタイトルのスレッドがありますね。参考になるでしょうか。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=17937&forum=12&8 | ||||
|
投稿日時: 2006-01-22 01:18
HTTPというのは、一つのリクエストに対して一つのレスポンスを返すプロトコルなので、
複数のファイルを返すことは原理的に不可能です。 対応策としては、 ・ファイル数回のリクエストを繰り返すようなscriptをクライアント側で実行させる。 ・multipartなレスポンスを返す。(IEが対応してないので、残念ながらほとんど無意味) ・複数ファイルを一個のzipにまとめてダウンロードする。 という辺りでしょうか。 | ||||
|
投稿日時: 2006-01-24 18:08
お教えいただきましてありがとうございます。
ファイルをzipにまとめてDLしようと思いました。 request.getParameterValuesで受けとった配列の最初から最後までループさせ、 その中で配列の各要素であるファイル名について javaからOSコマンド cp を実行し 規定のディレクトリに順順にコピーしていきます。 forループ終了直後に今度はOSコマンド zip を実行し 同ディレクトリ内にある全てのファイルをZIPして 同ディレクトリ内に収めます。 for直後に、そのディレクトリに存在するファイル一覧をログに吐き出してみると 確かに正しくコピーされてファイルが存在していました。 しかし、その直後に実行されているzipコマンドが正しく働いておらず zipファイルはできているのですがunzipすると中身が空っぽです。 なぜそうなってしまうのか今は分かりません。 よろしければアドバイスを宜しくお願い申し上げます。 | ||||
|
投稿日時: 2006-01-24 18:20
zipの使い方が正しくないから、じゃないでしょうか。 どんなコードを書いてるんですか? | ||||
|
投稿日時: 2006-01-24 18:23
当初の質問とはちょっと毛色が異なってきてますから、焦点を明確にするためにも別スレッドにしてはいかがでしょう?
| ||||
|
投稿日時: 2006-01-24 19:27
そうですね。
別スレッドとさせていただきます。 この件につきましてはアドバイスをいただきまして本当にどうもありがとうございました。 |
1