【问题标题】:Error: while trying to OPen PDF in ASP.NET错误:尝试在 ASP.NET 中打开 PDF 时
【发布时间】:2009-06-18 15:14:49
【问题描述】:

在我的 ASP.NET 应用程序中,当我尝试使用以下代码打开 PDF 文件时,出现错误

用于显示 PDF 文件的代码

FileStream MyFileStream = new FileStream(filePath, FileMode.Open);
long FileSize = MyFileStream.Length;
byte[] Buffer = new byte[(int)FileSize + 1];
MyFileStream.Read(Buffer, 0, (int)MyFileStream.Length);
MyFileStream.Close();
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment; filename="+filePath);
Response.BinaryWrite(Buffer);

我收到的错误

“打开此文档时出错。文件已损坏,无法打开”

【问题讨论】:

    标签: asp.net pdf


    【解决方案1】:

    听起来您使用 aspx 文件来输出 pdf。您是否考虑过使用作为 HttpHandler 的 ashx 文件?它绕过了所有典型的 aspx 开销,并且更有效地提供原始数据。

    这是使用您的代码的 ashx 示例:

    <% WebHandler Language="c#" class="ViewPDF" %>
    public class ViewPDF : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            FileStream MyFileStream = new FileStream(filePath, FileMode.Open);
            long FileSize = MyFileStream.Length;
            byte[] Buffer = new byte[(int)FileSize + 1];
            MyFileStream.Read(Buffer, 0, (int)MyFileStream.Length);
            MyFileStream.Close();
            Response.ContentType = "application/pdf";
            Response.AddHeader("content-disposition", "attachment; filename="+filePath);
            Response.BinaryWrite(Buffer);
        }
    
        public bool IsReusable
        {
            get { return false; }
        }
    }
    

    如果你还想使用aspx页面。确保您正在执行以下操作:

    // At the beginning before you do any response stuff do:
    Response.Clear();
    
    // When you are done all your response stuff do:
    Response.End();
    

    这应该可以解决您的问题。

    【讨论】:

      【解决方案2】:

      您必须刷新响应,否则它会被部分传输。

      Response.Flush();
      

      【讨论】:

        【解决方案3】:

        除了 ocedcio 的回复之外,您还需要注意 Stream.Read() 不一定会读取请求的所有字节。您应该检查来自Stream.Read() 的返回值,如果读取的字节数少于请求的字节数,则继续读取。

        详情请看这个问答:Creating a byte array from a stream

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-08-09
          • 2013-04-25
          • 2023-03-28
          • 2017-09-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多