我有一个用户报告文件在浏览器中显示为原始数据。他使用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文件。
答案 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();
方法调用。当我添加此行时,问题就消失了。