2012-04-16 282 views
-1

以下是一段我的代碼:如何使用使用Response.Transmit()

if (objTbl.Rows.Count > 0) 
{ 
    string attachment = "attachment; filename=Call-Details-Report-" + startDate.SelectedDate.Value.ToString("MM-dd-yyyy") + ".csv"; 
    Response.Clear(); 
    Response.ClearHeaders(); 
    Response.ClearContent(); 
    Response.AddHeader("content-disposition", attachment); 
    Response.ContentType = "text/csv"; 
    Response.AddHeader("Pragma", "public"); 

    bool commaRequired = false; 
    if (this.chkNET_NETWORKID.Checked) 
    { 
     Response.Write("Network ID"); 
     commaRequired = true; 
    } 
    if (this.chkNET_NETWORKNAME.Checked) 
    { 
     if (commaRequired) 
     { 
      Response.Write(","); 
     } 
     Response.Write("Network"); 
     commaRequired = true; 
    } 
} 

在上面的代碼objTbl是我的數據表。我從數據表中讀取數據並將其寫入響應並獲取文件進行下載。但是,當我嘗試下載大文件時出現錯誤。在執行程序期間內存不足。我聽說response.transmit。可以解決這個問題,但如何?

+0

多大是 「巨大的」?你在哪裏得到這個錯誤?在網絡服務器上?從客戶端瀏覽器?從客戶端應用程序? – RQDQ 2012-04-16 13:14:23

+0

你什麼時候調用Response.Transmit()方法?看起來像你的代碼片丟失了一些重要的信息。 – Xharze 2012-04-16 13:14:29

+0

@RQDQ來自客戶端瀏覽器,文件大小約爲180 mb – Jay 2012-04-16 13:20:38

回答

1

TransmitFile將指定文件直接寫入HTTP響應輸出流,而不將其緩衝在內存中。

這樣的:

 context.Response.Clear(); 
     context.Response.ContentType = "application/octet-stream"; 
     context.Response.AddHeader("content-disposition", "attachment; filename=ym.jpg"); 
     context.Response.TransmitFile(context.Server.MapPath(@"~/ym.jpg")); 
     context.Response.End(); 
+0

好的...但我的是一個數據表,所以如何去寫它? – Jay 2012-04-16 13:28:39

+0

@Jay先將它保存到文件中。然後傳輸文件 – 2012-04-16 13:31:10

+0

okk ..我只是有一個疑問,是否response.write將內容寫入內存?是dat wats導致內存異常 – Jay 2012-04-16 13:32:55