将PDF流写入响应流

时间:2011-05-06 20:26:44

标签: asp.net

当我尝试从我的asp.net页面运行以下代码时遇到问题。该代码来自另一篇文章(http://stackoverflow.com/questions/5828315/write-pdf-stream-to-response-stream)。当Test.pdf文件位于我的本地驱动器中时,单击对话框上的打开按钮时,我无法打开该文件。当单击保存按钮时,文件以“C:\ Downloads”中的myAspPageName.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();             
        }        
    }     
} 

2 个答案:

答案 0 :(得分:6)

您可以使用Response.WriteFile代替所有缓冲区工作。

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

答案 1 :(得分:3)

考虑使用HttpResponse.TransmitFile(ASP.NET> = 2.0),尤其是对于大型文件,因为它会在不将其缓冲到服务器内存的情况下写入文件。

此外,请确保始终将Response.ContentType属性设置为适当的MIME类型,否则浏览器有时会无法正确下载文件,尤其是在从处理程序编写文件时:

Response.ContentType = "application/pdf";