PDF 文件有时显示为垃圾

PDF file sometime being displayed as garbage

我有一个用户报告说文件在他的浏览器中显示为原始数据。他使用 Internet Explorer。

这些文件是通过 .ashx 处理程序文件提供的,它一直工作到。

这是我的 .ashx 处理程序的相关部分:

context.Response.Clear()
context.Response.AppendHeader("Content-Disposition", "attachment; filename=" + name)
context.Response.AppendHeader("Content-Length", size.ToString)
context.Response.ContentType = "application/pdf"
context.Response.TransmitFile(fullname)
context.Response.Flush()
HttpContext.Current.ApplicationInstance.CompleteRequest()

谁能从这张截图中看出什么?

更新:当 运行 IE 11 或 Edge 时,此行为出现在 Windows 10 上,并且仅在第二次打开文件时出现。 .pdf 和 .docx 文件都会发生这种情况。

这是我用来将 PDF 流式传输给客户端的代码。它适用于 IE 11。主要区别在于我使用的是基于您的代码的 BinaryWrite,您可能不想这样做..

HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AddHeader("Content-Type", "application/pdf");
HttpContext.Current.Response.AddHeader("Content-Disposition", "inline; filename=" + fileName + ".pdf");
HttpContext.Current.Response.BinaryWrite(bytes);
HttpContext.Current.Response.End();

There might be a solution here

I'll like this as well just in case..

根据 this thread,它可以像用 Response.End 替换 Response.Close 一样简单(或者在您的情况下.. 添加)

我终于自己找到了答案 - 它与 HTTP header content-length 有关,我错误地提交了一个恰好 1byte 太大的值。

这仅在 IE/Edge 和 Windows 10 中引起了奇怪的行为,如 OP 中所述。

我在 Page_Load 事件处理程序中将文件传输到浏览器的 aspx 页面遇到了同样的问题。 我的错误是缺少

Response.End();

方法调用。当我添加这一行时,问题就消失了。