2011-05-06 55 views
3

我在嘗試從我的asp.net頁面運行以下代碼時遇到了問題。該代碼來自另一篇文章(http://stackoverflow.com/questions/5828315/write-pdf-stream-to-response-stream)。當Test.pdf文件位於我的本地驅動器中時,我無法在單擊對話框上的打開按鈕時打開該文件。當點擊保存按鈕時,該文件會在「C:\ Downloads」中嘗試以myAspPageName.pdf的形式進行操作,而不會實際保存任何內容。將PDF流寫入響應流

我確定我做錯了什麼。謝謝你的幫助。有沒有更好的方法來做同樣的事情?

protected void Page_Load(object sender, EventArgs e) 
{   
    Context.Response.Buffer = false;   
    FileStream inStr = null;   
    byte[] buffer = new byte[1024];   
    long byteCount; inStr = File.OpenRead(@"C:\Downloads\Test.pdf");   
    while ((byteCount = inStr.Read(buffer, 0, buffer.Length)) > 0) 
    {  
     if (Context.Response.IsClientConnected) 
     { 
      Context.Response.ContentType = "application/pdf"; 
      Context.Response.OutputStream.Write(buffer, 0, buffer.Length); 
      Context.Response.Flush();    
     }   
    }  
} 

回答

6

您可以使用Response.WriteFile而不是所有的緩衝工作。

protected void Page_Load(object sender, EventArgs e) 
{   
    Context.Response.WriteFile(@"C:\Downloads\Test.pdf"); 
} 
+3

響應。 TransmitFile在資源上更有效 - 它不會將文件緩衝到內存中。 – 2011-05-06 21:58:58

3

考慮使用HttpResponse.TransmitFile(ASP.NET> = 2.0),尤其是對於大文件,因爲它寫入文件而不緩衝入服務器存儲器。

此外,還要確保你總是Response.ContentType屬性設置爲合適的MIME類型或瀏覽器有時會遇到麻煩用正確下載你的文件,特別是如果你正在寫從處理程序中的文件:

Response.ContentType = "application/pdf";