【发布时间】:2019-05-15 06:54:56
【问题描述】:
这个问题与提供的其他答案不同,因为我的问题集中在 VUE 以及 VUE 是否也有办法阻止默认方法。
这个问题更具体到 HTML 5“下载”以及 :href 的 VUE 绑定,以及为什么它不能阻止默认浏览器在新选项卡中打开文件的行为。
预期行为:将文件下载到浏览器
实际行为:在新选项卡中打开文件
例外:在新选项卡中仅打开图像、pdf 和浏览器兼容文件,其他文件(如 .exe)正常下载 - 为什么会这样,可以在 html 中更改此行为吗?
添加 target="_blank" 并不能解决问题
<a :href="downloadById(item.url)" download>Download</a>
单击上述链接时,文件将在新的浏览器选项卡中打开,我需要防止这种默认行为并在单击时强制下载。假设 HTML 5 标签“下载”似乎无法解决这个问题。
Chrome 最近弃用了用于跨域下载的下载标签表单。 vue 是否有一个修饰符来防止这个默认值?有没有其他方法可以用 javascript 或 html 下载文件?
一种建议的解决方案是将 URL 作为 arrayBuffer 读取,然后在 DOM 中创建一个新的 blob,然后创建一个锚元素并单击它。但强制下载文件似乎很不方便。
我确信他们必须是从 URL 下载文件的更清洁的解决方案,这是一个微不足道的问题,希望有一个简单的解决方案。
谢谢。
【问题讨论】:
-
这与你的服务器代码有关,而不是 vue 本身。尝试在服务器端添加 developer.mozilla.org/en-US/docs/Web/HTTP/Headers/… Content-Disposition 标头,以便您获得官方规范而不是专有标记扩展的支持。
-
该 url 是一个包含图像的公共 url,例如 googledrive 公共链接图像。遗憾的是我无法控制服务器及其标头,我只希望用户将文件下载到浏览器而不在新选项卡中打开它。
-
AFAIK,当前唯一可用的解决方案是您提到的“hacky”解决方案。
-
你好托尼,谢谢,是的,我也在寻找一个 vue 特定的例子,因为 vue 有很多防止默认的方法,我希望它可以做到.. 但在这种情况下并没有lars 的以下回答为我解决了这个问题。
标签: html vue.js arraybuffer