- PR -

DownLoad の処理について

1
投稿者投稿内容
SL
大ベテラン
会議室デビュー日: 2008/05/02
投稿数: 183
投稿日時: 2009-02-23 19:19
お世話になります。

ファイルをサーバよりダウンロードしたくて下記のように書いてみました。
1つのファイルのみの場合、OKですが複数ある場合1回のみで処理が終わってしまいます。
下記のコードは、リストコントロールにあるファイル名すべてを順にダウンロードします。
ListBox1.Items[i].Text...は、ファイル名のみ(拡張子も)
string[] FileMei = (string[])Session["FilesFullPath"];...は、同じ順でフルパスと名前です。

Response.End();が実行されると表示のためのダイアログが表示されそれ以降処理が繰り返し行われません。どうしたらリストにある分、予定では、2から5件程度連続で行いたいのですがどうしたらいいですか?

また、下記のやり方で1回にダウンロードできるファイルサイズの上限ってありますか?
今回の実際のバイト数は、大きくても2,30KBですが参考までに教えてください。

コード:
protected void Button1_Click(object sender, EventArgs e)
{
      int num = ListBox1.Items.Count;
      for (int i = 0; i < num; ++i)
      {
          DownLoad(i);
      }
}
protected void DownLoad(int i)
{
      string[] FileMei = (string[])Session["FilesFullPath"];

      if (ListBox1.Items[i].Selected)
      {
          string str = string.Format("attachment;filename={0}", ListBox1.Items[i].Text);
          Response.AddHeader("Content-Disposition", str);
          Response.ContentType = "application/octet-stream";
          System.Text.Encoding encoding = System.Text.Encoding.GetEncoding("Shift-JIS");

          FileStream MyFileStream;
          long FileSize;

          MyFileStream = new FileStream(FileMei[i], FileMode.Open);
          FileSize = MyFileStream.Length;

          byte[] Buffer = new byte[(int)FileSize];
          MyFileStream.Read(Buffer, 0, (int)FileSize);
          MyFileStream.Close();

          Response.BinaryWrite(Buffer/*encoding.GetBytes()*/);
     }
     Response.End();
}

べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2009-02-23 23:09
まず、1回のRequestでブラウザ側がダウンロードできるのは1つのファイル、これはいいですか?

その上で、何がしたいのか、
1、連続してダウンロードさせたい。
2、複数のファイルを1つのファイルに結合してダウンロードさせたい。

2であれば、単に、1回目のfor文の中でResponse.Endしちゃうから、が理由ですよね。
Response.Endをfor文の後に移動すればいいです。

1であれば、ブラウザが複数回リクエストしないと無理です、多分。

[ メッセージ編集済み 編集者: べる 編集日時 2009-02-23 23:10 ]
みやぼん
会議室デビュー日: 2006/01/06
投稿数: 13
投稿日時: 2009-02-24 08:44
いつもお世話になっております。
みやぼんです。

べるさんが記載されているとおり
>1回のRequestでブラウザ側がダウンロードできるのは1つのファイル
ですので、同じような要件をかなえる際には、
複数のファイルをZip圧縮で1つのファイルに固めて
ダウンロードさせてますよ。
参考までに、Zip圧縮のページをどうぞ!
http://dobon.net/vb/dotnet/links/createzipfile.html
SL
大ベテラン
会議室デビュー日: 2008/05/02
投稿数: 183
投稿日時: 2009-02-24 14:01
お世話になります。

> 1回のRequestでブラウザ側がダウンロードできるのは1つのファイル、これはいいですか?
そういうことでしたか。ここに勘違いがあったようです。
個々のファイルは、ここのファイルで保存したいので、回数分、Requestを発行するか教えていただいた、Zip圧縮を利用するか検討します。
1

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