- PR -

複数ファイルのダウンロード

1
投稿者投稿内容
未記入
ベテラン
会議室デビュー日: 2005/04/16
投稿数: 51
投稿日時: 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つ目のファイルしか保存できません。

チェックを複数入れた場合に複数回そのダイアログを表示させるにはどうすべきかアドバイスをお願いいたします。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-01-20 17:45
同じタイトルのスレッドがありますね。参考になるでしょうか。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=17937&forum=12&8
coasm
大ベテラン
会議室デビュー日: 2001/11/26
投稿数: 237
投稿日時: 2006-01-22 01:18
HTTPというのは、一つのリクエストに対して一つのレスポンスを返すプロトコルなので、
複数のファイルを返すことは原理的に不可能です。

対応策としては、
・ファイル数回のリクエストを繰り返すようなscriptをクライアント側で実行させる。
・multipartなレスポンスを返す。(IEが対応してないので、残念ながらほとんど無意味)
・複数ファイルを一個のzipにまとめてダウンロードする。
という辺りでしょうか。
未記入
ベテラン
会議室デビュー日: 2005/04/16
投稿数: 51
投稿日時: 2006-01-24 18:08
お教えいただきましてありがとうございます。
ファイルをzipにまとめてDLしようと思いました。

request.getParameterValuesで受けとった配列の最初から最後までループさせ、
その中で配列の各要素であるファイル名について
javaからOSコマンド cp を実行し
規定のディレクトリに順順にコピーしていきます。

forループ終了直後に今度はOSコマンド zip を実行し
同ディレクトリ内にある全てのファイルをZIPして
同ディレクトリ内に収めます。

for直後に、そのディレクトリに存在するファイル一覧をログに吐き出してみると
確かに正しくコピーされてファイルが存在していました。
しかし、その直後に実行されているzipコマンドが正しく働いておらず
zipファイルはできているのですがunzipすると中身が空っぽです。

なぜそうなってしまうのか今は分かりません。
よろしければアドバイスを宜しくお願い申し上げます。
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2006-01-24 18:20
引用:

未記入さんの書き込み (2006-01-24 18:08) より:

for直後に、そのディレクトリに存在するファイル一覧をログに吐き出してみると
確かに正しくコピーされてファイルが存在していました。
しかし、その直後に実行されているzipコマンドが正しく働いておらず
zipファイルはできているのですがunzipすると中身が空っぽです。

なぜそうなってしまうのか今は分かりません。


zipの使い方が正しくないから、じゃないでしょうか。
どんなコードを書いてるんですか?
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-01-24 18:23
当初の質問とはちょっと毛色が異なってきてますから、焦点を明確にするためにも別スレッドにしてはいかがでしょう?
未記入
ベテラン
会議室デビュー日: 2005/04/16
投稿数: 51
投稿日時: 2006-01-24 19:27
そうですね。
別スレッドとさせていただきます。
この件につきましてはアドバイスをいただきまして本当にどうもありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)