【问题标题】:stream pdf from MemoryStream从 MemoryStream 流式传输 pdf
【发布时间】:2015-05-29 16:54:30
【问题描述】:

我正在使用以下代码将 .ashx 文件中的 pdf 流式传输到浏览器:

context.Response.Clear();
context.Response.Charset = "";
context.Response.ContentType = "application/pdf";
context.Response.AddHeader("Content-Disposition", "inline;filename=test.pdf");
context.Response.AddHeader("content-length", stream.Length.ToString());
stream.WriteTo(context.Response.OutputStream);
context.Response.Flush();
context.Response.End();

上下文来自哪里:

public void ProcessRequest(HttpContext context)

在使用 Chrome 或 Firefox 时一切正常,并显示在浏览器上。但是当我使用 IE 11 时,我得到一个空白屏幕。如果我转到 Adob​​e Reader->Edit->Preference->Internet 并取消选中“在浏览器中显示 PDF”然后从 IE 中打开 Adob​​e Reader 并正确显示 PDF。但是一旦我取消选中“在浏览器中显示 PDF”,它就会显示空白屏幕:

如果我转到 IE“管理加载项”,它显示 Adob​​e 已启用:

我看过其他帖子,但似乎没有任何效果。我认为它是 IE 的东西,因为 Chrome 和 Firefox 可以工作,如果我没有在浏览器上加载 IE 显示器。

关于什么可能导致这种情况的任何想法?

更新:提琴手数据:

这是我从 Fiddler 那里得到的。除了 IE 不工作之外,Chrome 和 IE 之间没有什么特别之处:

铬: 要求:

GET /FileDownloadHandler.ashx?session=agenda_item_number_download&id=6079&downloadtoken=635685165181990000 HTTP/1.1 主机:本地主机 连接:保持活动 接受:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8 用户代理:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36 推荐人:http://localhost/FileDownload.aspx?session=agenda_item_number_download&id=6079 接受编码:gzip、deflate、sdch 接受语言:en-US,en;q=0.8,es;q=0.6,ru;q=0.4 Cookie:ASP.NET_SessionId=n3r0p3lgrnsherwl0iid3ser

回复:

HTTP/1.1 200 正常 缓存控制:私有 内容长度:150173 内容类型:应用程序/pdf 服务器:Microsoft-IIS/8.0 内容处置:内联;文件名=test.pdf X-AspNet-版本:4.0.30319 设置Cookie:DownloadSessionToken=635685165181990000;路径=/ X-SourceFiles: =?UTF-8?B?QzpcUHJvamVjdHNcTUNXZWJBcHBsaWNhdGlvbnNcU291cmNlXE1vaGF2ZUNvdW50eVxGaWxlRG93bmxvYWRIYW5kbGVyLmFzaHg=?= X-Powered-By: ASP.NET 日期:格林威治标准时间 2015 年 5 月 29 日星期五 17:15:19

IE:

请求:

GET /FileDownloadHandler.ashx?session=agenda_item_number_download&id=6079&downloadtoken=635685164869660000 HTTP/1.1 接受:文本/html、应用程序/xhtml+xml、/ 推荐人:http://localhost/FileDownload.aspx?session=agenda_item_number_download&id=6079 接受语言:en-US 用户代理:Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) 像 Gecko 接受编码:gzip,放气 连接:保持活动 DNT: 1 主机:本地主机 Pragma:无缓存 Cookie:ASP.NET_SessionId=1ekxziruzsstknjubyugl3ur

回复:

HTTP/1.1 200 正常 缓存控制:私有 内容长度:150173 内容类型:应用程序/pdf 服务器:Microsoft-IIS/8.0 内容处置:内联;文件名=test.pdf X-AspNet-版本:4.0.30319 设置Cookie:DownloadSessionToken=635685164869660000;路径=/ X-SourceFiles: =?UTF-8?B?QzpcUHJvamVjdHNcTUNXZWJBcHBsaWNhdGlvbnNcU291cmNlXE1vaGF2ZUNvdW50eVxGaWxlRG93bmxvYWRIYW5kbGVyLmFzaHg=?= X-Powered-By: ASP.NET 日期:格林威治标准时间 2015 年 5 月 29 日星期五 17:14:47

修复更新

好吧,这似乎是 Adob​​e Reader 的问题。我发现了问题,因为最终我的流会产生 103:103 错误。在做了一些搜索后,我发现它说要执行以下操作:

启动 Adob​​e Reader 在“Adobe Preferences”中打开菜单“General” 取消勾选(取消选中)设置“启动时启用保护模式” 如果还是不行就卸载软件,运行adobe clean tool然后重新安装软件。

现在它可以正常工作了。我已经包含了CC Tool,以防有人想使用它。

【问题讨论】:

  • 查看此相关帖子,似乎值得使用 Fiddler 仔细检查标题,确保没有指定附件。 stackoverflow.com/questions/859815/…
  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
  • 屏幕截图中的页面是 FileDownload.aspx,但您说 PDF 是从 FileDownloadHandler.ashx 流式传输的。处理程序是否加载在 iframe 或对象标记中?
  • 你说得对,我不小心拍错了屏幕截图。我已经更新了我的原始问题以包含正确的屏幕截图。我还添加了 Adob​​e 给出的错误

标签: asp.net pdf


【解决方案1】:

我在原始帖子中发布了我的答案。似乎这个问题是一个 Adob​​e Reader 错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-22
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 2015-11-28
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    相关资源
    最近更新 更多