PDF文件有时被显示为垃圾

时间:2016-01-15 10:02:31

标签: asp.net .net internet-explorer ashx filehandler

我有一个用户报告文件在浏览器中显示为原始数据。他使用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()

有人可以从这个截图中找到一些东西吗? enter image description here

更新:在运行IE 11或Edge时,Windows 10上会出现此行为,并且仅在第二次打开文件时出现此行为。它适用于.pdf和.docx文件。

3 个答案:

答案 0 :(得分:1)

这是我用来将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.Close替换Response.End一样简单(或者在你的情况下......添加)

答案 1 :(得分:1)

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

这导致了仅在IE / Edge中的奇怪行为,并且仅在OP中描述了Windows 10。

答案 2 :(得分:0)

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

的缺失
Response.End();

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