Response.WriteFile PDF文件 - 损坏的文件

时间:2009-04-20 21:07:10

标签: c# pdf

我在将PDF文件写入浏览器时遇到问题。其他mime类型工作正常。 PDF文件已损坏。

FileInfo file = new FileInfo(Path.Combine(_module.FileDir, _file.FilePath));
Response.ClearContent();
Response.ClearHeaders();
Response.ContentType = _file.ContentType;
Response.AppendHeader("Content-Disposition", "attachment; filename=" + Regex.Replace(_file.FilePath, "\\s", "-"));
Response.AppendHeader("Content-Length", file.Length.ToString());
try
{
    Response.WriteFile(file.FullName);
    Response.Flush();
    Response.Close();
}
catch
{
    Response.ClearContent();
}

5 个答案:

答案 0 :(得分:1)

我的问题出在HTTP模块上。我正在应用白色空间过滤器

    HttpApplication app = sender as HttpApplication;
    if (app != null && app.Request.RawUrl.Contains(".aspx"))
    {
        app.Response.Filter = new WhitespaceFilter(app.Response.Filter);
    }

答案 1 :(得分:1)

IIS HTTP压缩和流式处理PDF:不能正常工作。 http://blog.1530technologies.com/2006/11/iis_http_compre.html

答案 2 :(得分:1)

你需要这三个陈述:

Response.Flush(); Response.Close(); 到Response.End();

最后一个是最重要的。

答案 3 :(得分:0)

对于这种情况,Response.Redirect应该也可以正常工作:

FileInfo file = new FileInfo(Path.Combine(_module.FileDir, _file.FilePath));
Response.Redirect(file.FullName);

答案 4 :(得分:0)

  1. 您确定要获得正确的MIME类型吗?
  2. 您是试图强制用户下载,还是仅流出PDF数据?
  3. 您是否在任何地方执行Response.End()调用,以确保不会发送额外数据(标题和PDF二进制文件之外)?
  4. 我认为这可能是你的问题#3。 Microsoft's Knowledge Base提供了此代码,基本上就是您正在做的事情。

    //Set the appropriate ContentType.
    Response.ContentType = "Application/pdf";
    //Get the physical path to the file.
    string FilePath = MapPath("acrobat.pdf");
    //Write the file directly to the HTTP content output stream.
    Response.WriteFile(FilePath);
    Response.End();