gpt4 book ai didi

internet-explorer - 为什么 Internet Explorer 无法使用 NodeJS 和 Express 下载 PDF?

转载 作者:搜寻专家 更新时间:2023-11-01 00:26:34 25 4
gpt4 key购买 nike

我有一个正在使用 NodeJS 构建的网站,需要提供一些 PDF(以及其他文件)。

由于我无法确定的原因,Internet Explorer 8 将无法在 Acrobat Viewer 中第一次完全下载 PDF(有时之后多次)。直接保存文件就可以了,但这并不理想。 Chrome 运行良好,但我没有测试过其他浏览器。

没有错误消息,只是状态栏停止更新并显示: Downloaded (2.97 MB of 16.33 MB):
(来源:twimg.com)

我通过 NodeJS 和 Express(v3、beta2)/Connect 框架(它是提供文件的 Connect Static 中间件)提供文件。我也通过 SSL 提供文件,但关闭它不会似乎没有帮助。

任何想法将不胜感激!谢谢

编辑 - 包括更多细节:

首先 - 我已经从 Express v2 升级到 v3 以尝试解决这个问题 - 没有这样的运气。

这是提供文件的应用程序路由。静态服务组件确实有效,因此问题似乎出在 IE 如何检索文件或 express 如何将文件提供给 IE。

app.get('/store/*', ensureAuthenticated, express.static(__dirname + '/../uploads'));

function ensureAuthenticated(req, res, next) {
if (req.isAuthenticated()) {
return next();
}
} else {
res.redirect('/login');
}

就错误而言——我在 IE 中没有看到 404 错误或任何错误。它只是挂起一个空白屏幕,上图显示左下方状态栏中的下载量。 Adobe 最终(约 5 分钟后)失败并发出警告:“此文件已损坏且无法修复”。我知道该文件没有损坏,因为 IE 偶尔会加载它(请参阅下面的 Fiddler 请求)。

在 Fiddler 中,我看到以下内容。 Multiple requests from IE for the PDF. 2 fail, 1 succeeds

前两个请求失败,而第三个请求成功交付 PDF。

如果还有什么我可以提供的,请告诉我。

最佳答案

所以,我找到了问题(或者至少,一个或 4 个解决方案)。

我花了一段时间并进行了大量的研究、测试用例和各种各样的工作,但我最终做到了。

当 IE8(可能还有其他浏览器,但我没有进行广泛测试)使用 Adob​​e 9(未经 Adob​​e X 或任何其他版本验证)插件请求 PDF 时,有时它会获取整个文件作为一。这是我看到的成功,对应于上面 Fiddler 屏幕截图中的请求 22。如果文件很小,它似乎会抓取整个文件,但在这种情况下,我使用 16MB 的 PDF 进行测试。

在其他情况下,Adobe 将发送以下形式的范围 header :

Range: bytes=a-b, c-d

其中 a-b 是一个范围,c-d 是一个范围,它看起来不是连续的。

我对 Range header 的了解并不广泛,所以我不确定这是否有效。我所做的研究表明不是。

无论如何,在Connect 的static.js 中,它使用lib/util.js 中称为parseRange 的范围解析方法。此方法返回以下形式的范围数组:

[
{ start: a, end: b },
{ start: c, end: d}
]

在 static.js 中它调用此方法并将值分配给 ranges,然后它使用 ranges[0] 来计算范围,从而忽略值 cdab 之间的范围是唯一从文件中读取并发送到请求的数据。

我相信 Adob​​e 9 然后会继续等待更多数据,这会导致我看到的挂起。

解决方案

  • 最简单的解决方案是删除 static.js 中的 header “Accept-Ranges”
  • 我实现的一个更复杂(不一定正确)的解决方案是取ac 的最小值以及b d 创建一个新范围并在范围检查代码中返回它。这个要点显示了我所做的:https://gist.github.com/2930131
  • 我认为第三种(可能的)解决方案是监视客户端何时一直等待数据并处理连接(关闭它,发送更多数据 - 我不确定!)。虽然我真的不知道这将如何运作,但我会尝试将它推荐给可能的人。

第二种解决方案适用于我的用例。如果您偶然发现它,我希望它对您也有用!

关于internet-explorer - 为什么 Internet Explorer 无法使用 NodeJS 和 Express 下载 PDF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11020374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com