2009-05-08 20 views
5

ストリーミングを開始MVC.NETそれ私はのThread.sleepを追加ストリームのzipファイルには、私は継続的にユーザーのダウンロードとしてzipファイルをストリーミングする方法を作成しようとしている

(無駄なストリーミングが存在しないように)待ち時間をシミュレートする

public override void ExecuteResult(ControllerContext context) { 
    HttpResponseBase response = context.HttpContext.Response; 

    response.Clear(); 
    response.ClearContent(); 
    response.ClearHeaders(); 
    response.Cookies.Clear(); 
    response.ContentType = ContentType; 
    response.ContentEncoding = Encoding.Default; 
    response.AddHeader("Content-Type", ContentType); 
    context.HttpContext.Response.AddHeader("Content-Disposition", 
          String.Format("attachment; filename={0}", 
          this.DownloadName)); 
    int ind = 0; 
    using (ZipOutputStream zipOStream = 
       new ZipOutputStream(context.HttpContext.Response.OutputStream)) 
    { 
     foreach (var file in FilesToZip) 
     { 
      ZipEntry entry = new ZipEntry(FilesToZipNames[ind++]); 
      zipOStream.PutNextEntry(entry); 
      Thread.Sleep(1000); 
      zipOStream.Write(file, 0, file.Length); 
      zipOStream.Flush(); 
     } 
     zipOStream.Finish(); 
    }  
    response.OutputStream.Flush(); 
} 

すべてのファイルが圧縮されるまで、zipがストリーミングを開始しないようです。継続的にストリームする方法はありますか?多分別の図書館で?

答えて

9

zip形式がストリーミングの一部であると仮定すると、デフォルトで応答がバッファリングされているという問題があります。 HttpResponseBase.BufferOutputをfalseに設定すると、すぐにストリーミングが開始されます。

+0

ありがとうございました。 – maxfridbe

0

httpへの出力を確認するには、zipostreamではなくoutputstreamをフラッシュする必要があるかもしれないと思います。その場合は、response.OutputStream.Flush()がループに表示されます。実際にあなたの問題を解決するかどうかは分かりません。

関連する問題