- PR -

ASPで、同時に2つのファイルをダウンロードする方法について

投稿者投稿内容
Bubbles
会議室デビュー日: 2004/04/14
投稿数: 9
投稿日時: 2004-04-14 16:16
いつもお世話になっております。
題記の件、サーバー上のあるフォルダ配下に格納中の2つのファイル(例えば、CSVファイルとExcelファイルなど)を同時にダウンロードするにはどのようにすればよろしいのでしょうか?

機能:フォーム上のボタンをクリックしたら、サーバー上の2つのファイルをダウンロードする
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-04-14 16:33
サーバーとの一回のやり取りでは無理です。
JavaScriptで別ウィンドウを2つ開いて、その要求でファイルを取得するというのはどうでしょう。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-14 17:06
マルチパートにする、というのは?←実はよくわかっていない
Bubbles
会議室デビュー日: 2004/04/14
投稿数: 9
投稿日時: 2004-04-15 09:00
早速の返信ありがとうございました。

ウィンドウを2つ開く方法の場合、開いたウィンドウを閉じる行為が必要になるのではないかと思います。
(通常のダウンロードの場合は、OS?が表示するダイアログ(ダウンロード&保存)なのでダウンロード完了後にウィンドウが残ることはない)

イメージとしては、一回のボタン操作で、2つのファイルをダウンロードさせたいです。
また、できることなら保存先も1回だけ選んでそこにダウンロードするようにしないのですが技術的に無理なのでしょうか?
但し、ダウンロード時の保存先については2回選ぶことになっても構いません

AddHeader,ContentType,Response.Writeでダウンロードさせることはできますか?

以上、ご存知でしたらご教授ねがいます
Cluster
ぬし
会議室デビュー日: 2003/03/06
投稿数: 289
お住まい・勤務地: 大阪
投稿日時: 2004-04-15 09:27
難しいんじゃないでしょうか?

まず、1つのHTTPリクエストでは、1つのHTTPレスポンスしか返ってきません。
なので、無理矢理な実装をクライアント・サーバ双方に行わない限り、1つのリクエストで2つのファイルをダウンロードするのは無理です。

次に、(私の知る限りの)Webブラウザは、2つ以上のHTTPリクエストを同時平行的に扱うことができません。2つ目のリクエストを発行した時点で、1つ目のリクエストが破棄されてしまいます。従って、ブラウザ1つでリクエスト2つというのも無理です。

結局、一郎さんが仰ってる通りでしょうね。

引用:

Jittaさんの書き込み (2004-04-14 17:06) より:
マルチパートにする、というのは?←実はよくわかっていない



レスポンスにマルチパートなんてあるんですか?
リクエスト時のフォームなら、マルチパートで複数のファイルを送ることが可能ですが・・・?
#RFCまで確認したわけじゃないですけど

# Jittaさんへのコメント追記

[ メッセージ編集済み 編集者: Cluster 編集日時 2004-04-15 09:35 ]
Bubbles
会議室デビュー日: 2004/04/14
投稿数: 9
投稿日時: 2004-04-15 11:56
Clusterさん、返信ありがとうございます。
無理ということで別の方法を検討することにします。

2つのウィンドウを開いて、それぞれのウィンドウでダウンロードさせるとした場合ですが、以下のようなことは可能なのでしょうか?

AddHeader,ContentType,Response.Write発行で表示されたダウンロードダイアログ(ダウンロード&保存先)が閉じられたかどうかを判断し、閉じられたら開いている自身のウィンドウも閉じる。

<実現したい処理の流れ>
1.実行ボタンをクリック
2.サーバー上の2つのファイルを取得するために、それぞれサブウィンドウを開き、onLoad()でダウンロードASPを呼び出す
3.ダウンロード完了後、開いたサブウィンドウを自動で閉じる

以上、別件の質問となってしまいますが、ご存知でしたらご教授願います
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-15 13:25
引用:

Clusterさんの書き込み (2004-04-15 09:27) より:

レスポンスにマルチパートなんてあるんですか?
リクエスト時のフォームなら、マルチパートで複数のファイルを送ることが可能ですが・・・?
#RFCまで確認したわけじゃないですけど


 だから「実はよくわかっていない」と・・・

 表示された画面があって、ここからボタンクリックしてポストバックを発生させます。このポストバックで、
Response.Clear()
Response.AppendHeader("Content-Disposition", "file;filename=〜.csv")
Response.ContentType = "text/csv"
Response.BinaryWrite(〜)
Response.End()
とやっているのですが、画面の表示はそのままで、CSVファイルが別にダウンロードされるのです。だから、なんかあるのかなぁ?・・・と
#逆に、何でこれでそうなるのかもわかっていない
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-04-15 13:55
引用:

Jittaさんの書き込み (2004-04-15 13:25) より:
画面の表示はそのままで、CSVファイルが別にダウンロードされるのです。


これは、「ボタンクリックして発生したポストバック」のレスポンスにHTMLの代わりにCSVを返しているわけで、ブラウザ側ではそのレスポンスをブラウザに表示しないでファイルとして保存しているわけです。
ですのでブラウザの画面は本当に「表示はそのまま」ですよね。変えることはできません。

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