【问题标题】:Content-Disposition headers to allow both download and open file允许下载和打开文件的 Content-Disposition 标头
【发布时间】:2019-12-19 06:52:05
【问题描述】:

我有一些文件希望人们能够根据需要在浏览器中下载或查看。 我无法弄清楚如何简单地做到这一点,在主机中设置标题或做一些 javascript 魔术。

最终结果应该是一个 html 页面,每个文件列出 2 个链接,一个用于在新选项卡中打开,一个用于下载文件。我可以让一个或另一个同时工作,但不能同时工作。

我尝试了两个 Content-Disposition 选项,它们都可以工作,但不能同时工作。 我尝试了 chrome.downloads api,但它在普通的 html 脚本中不可用。 我尝试了this,但它下载了一个文本文件,其中包含链接本身,而不是文件内容。 下载属性被忽略以支持 Content-Disposition 标头,并且默认为内联,因此即使不设置它强制打开并且不允许下载。

Content-Disposition: inline
Content-Disposition: attachment
<a href="test.txt" download="text.txt" target="_blank">

谁能发现我做错了什么?

【问题讨论】:

  • 在哪里你设置Content-Disposition?该代码是什么样的?当浏览器从服务器正确发送时,我从来没有遇到过不能正确处理它的问题。
  • 我的问题是我需要能够根据用户想要做的事情在浏览器上进行下载和打开。 3行csv?在选项卡中打开,15000 行 csv ?下载。一切都是关于选择

标签: javascript html http-headers content-disposition


【解决方案1】:

Content-Disposition 标头需要由 服务器 发送,我相信在您的情况下,它只能针对响应中的给定文件出现一次(在您的情况下,您正在发送只有一个文件,而不是具有多个文件的多部分表单数据)。毕竟,这是给用户代理关于它应该如何处理该文件的建议。要实现您的链接,您需要两个单独的 URL(如果有服务器端脚本,区别可能是查询字符串):一个提供 Content-Disposition: inline 响应,另一个提供 Content-Disposition: attachment; filename="text.txt" 响应。如果您这样做,这些链接应该可以在任何现代浏览器中使用。

【讨论】:

  • 嗯,我使用 s3 作为主机,所以我无法访问它,但这证实了我的怀疑,即没有任何好的方法可以仅使用标头来执行此操作。谢谢。
【解决方案2】:

遗憾的是,似乎没有任何方法可以仅使用标头来做到这一点,我需要编写一些脚本。

【讨论】:

    猜你喜欢
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 2020-04-02
    • 2011-02-02
    • 1970-01-01
    相关资源
    最近更新 更多