2011-05-06 57 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";