2014-01-29 70 views
0

我有一個.net Web應用程序,用於從應該下載到客戶端主機的REST服務中提取大文檔。在Response.outputStream上刷新數據

我想流數據,以便它似乎直接下載到客戶端上。我的問題是,直到調用Response.End()之前,「文件下載」對話框才顯示出來。我希望它顯示出實時性。

// class extends System.Web.UI.Page 

HttpClient client = new HttpClient(); 

// Add an Accept header for the mediatype format. 
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(mediaType)); 

Stream stream = client.GetStreamAsync("http://www.aaa.se/theurl").Result; 
StreamReader inputStream = new StreamReader(stream); 

Response.ContentType = "text/plain"; 
Response.AppendHeader("Content-Disposition", "attachment; filename=file.txt"); 

using (StreamWriter streamWriter = new StreamWriter(Response.OutputStream)) 
     { 
      streamWriter.AutoFlush = true; 
      string theLine = null; 

      while ((theLine = inputStream.ReadLine()) != null) 
      { 
       streamWriter.WriteLine(theLine); 
       streamWriter.Flush(); // <<<---- HERE FileDialog should pop up! 
      } 

} 
Response.End(); // <<<--- BUT it pops up here! 

Flush和AutoFlush應該在這裏做詭計!! ??任何人都可以看到我做錯了什麼?

感謝

回答

1

你可能想嘗試刷新的HttpResponse在while循環:

while ((theLine = inputStream.ReadLine()) != null) 
{ 
     streamWriter.WriteLine(theLine); 
     streamWriter.Flush(); 
     Response.Flush(); 
} 
2
Response.BufferOutput = false; 

把你開始將數據寫入響應流之前。