【发布时间】:2012-05-17 23:46:09
【问题描述】:
我有一个不寻常的要求。本质上,我需要一种方法,以便当用户单击链接或按钮时,他们将收到 PDF。这里棘手的部分是服务器不会处理请求根本,除非随它一起发送自定义标头(否则它认为该人已注销并将其发送到登录屏幕)。 p>
目前标题的工作方式无法更改,因此请不要纠缠于此;它将在未来发生变化,并且是我无法控制的内部应用程序。
我探索过的选项:
- 使用 iframe 或简单地打开带有某种路径的新窗口,该路径将返回 PDF。这不起作用,因为我无法为 PDF 指定所需的标头,并且会在到达 PDF 本身之前被重定向。
- 无法使用表单并提交请求,因为我不能 向表单添加任何自定义标题(只有 XHR 和插件可以,AFAIK)。
- 使用 XHR 无法工作,因为它可以添加标题和 检索文件,无法将其保存在客户端。
看来我目前唯一的选择基本上是:
- 使用某种插件(例如 Flash 或 Silverlight)来请求文件。
- 比预期更早地强制要求更改,以便不再需要标头。
这里有什么我遗漏的吗?我希望有人可以验证我的发现或指出我错过的东西,因为据我所知,我在这里真的无能为力。
编辑:这似乎很恰当,并证实了我的想法:XMLHttpRequest to open PDF in browser
【问题讨论】:
-
在应用程序和脚本之间添加某种隧道怎么样?隧道可以查询应用程序并接收文件,然后在将文件刷新给用户之前设置适当的标头,从而实际触发下载。我不知道这是否适用于您的系统,具体取决于安全性。
-
隧道不是一个坏主意,虽然我不确定我们可以在这里实现它。唔。谢谢,我会调查的。
-
如果您可以不支持 IE stackoverflow.com/q/9620497 另请参阅 stackoverflow.com/q/6165266 和 html5rocks.com/en/tutorials/file/xhr2
-
实际上,我们只支持 Moz 和 Webkit,所以 blob url 可能会很好地工作!我会戳一下。谢谢!
-
@LasseChristiansen-sw_lasse 唯一在技术上看起来可行的真正解决方案是使用 blob URL。因此,本质上是从服务中获取 PDF blob 并传递标头,然后将 PDF 嵌入到 blob URL 中,此时如果用户单击它,他们将获得 PDF。 Esailija 与我的最终解决方案非常相似,我只是从未标记它有答案。
标签: javascript html forms http header