javascript - Content-Disposition header 允许下载和打开文件

标签 javascript html http-headers content-disposition

我希望人们能够根据自己的意愿下载或在浏览器中查看一些文件。 我不知道如何简单地做到这一点,在主机中设置 header 或执行一些 JavaScript 魔法。

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

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

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

有人能发现我做错了什么吗?

最佳答案

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

关于javascript - Content-Disposition header 允许下载和打开文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57465474/

相关文章:

javascript - 需要帮助理解令人困惑的 Typescript 功能

Javascript - 离开页面时的确认

html - 在一个元素中应用两个伪类

javascript - Canvas 作为文件输入?

http - 图片缓存问题

c# - 调用基础 REST API

javascript - 巴别塔 v6 : How/Can I write a plugin that adds a new syntax (ie a new operator)?

javascript - 为什么这个 jQuery OOP 属性变得未定义?

javascript - 使用 JavaScript 使用 JSON 填充 HTML

flutter - 如何修复 HttpException : Connection closed before full header was received