通过js或查询强制下载

Sha*_*aun 21 javascript jquery

是否可以通过JS或Javascript强制下载,即网页不应该在浏览器的新选项卡中打开文件,而是弹出让用户选择"另存为"或打开???

Gok*_*N K 48

随着HTML5的出现,您可以在锚标记中使用新的属性下载.

代码看起来像

<a download="name_of_downloaded_file" href="path/to/the/download/file"> Clicking on this link will force download the file</a>
Run Code Online (Sandbox Code Playgroud)

它适用于firefox和chrome最新版本.我应该提一下我没有在IE中查看它吗?:P

在sstur发表评论后编辑了下载属性


https://caniuse.com/#feat=download

  • 作为[安全功能](https://bugzilla.mozilla.org/show_bug.cgi?id=676619),当内容位于不同的主机名上且其来源受标头限制时,将忽略您指定的下载值X-Frame-Options:SAMEORIGIN。 (5认同)
  • 值得注意的是,您可以为下载属性指定一个值,该值将成为下载的默认文件名. (2认同)
  • 好吧,浏览器将阻止您启用在不同站点或不同端口下的文件下载,因此功能非常有限。 (2认同)

Luk*_*kas 19

动态创建链接,然后单击下载属性以强制下载为文件:

var anchor = document.createElement('a');
anchor.href = this.props.download_url;
anchor.target = '_blank';
anchor.download = this.props.file_name;
anchor.click();
Run Code Online (Sandbox Code Playgroud)

请注意我甚至没有将它添加到DOM,所以它很快.

PS download属性不适用于IE.但它只会在新标签中打开链接. http://caniuse.com/#feat=download


Sea*_*oyd 14

您无法通过JavaScript强制执行该行为,需要在服务器端设置HTTP标头:

Content-disposition=attachment; filename=some.file.name
Run Code Online (Sandbox Code Playgroud)

解决问题的方法是让您的AJAX方法将用户重定向到PDF的URL:

location.replace('path/to.pdf');
Run Code Online (Sandbox Code Playgroud)

(必须为PDF设置上述HTTP标头)


更新

在这个答案的时候,这是不可能的.现在是,向下滚动以查看另一个答案.

  • @mpen自Chrome 65以来,不再可能使用跨源href.因此,如果你想在imgur.com以外的域名上创建`<a rel="nofollow noreferrer" href="https://i.imgur.com/IskAzqA.jpg" download>`,它将不会按预期工作.这里有弃用和删除公告:https://developers.google.com/web/updates/2018/02/chrome-65-deprecations#block_cross-origin_wzxhzdk5a_download (4认同)
  • 现在可以使用[download](http://caniuse.com/#search=download)属性。 (2认同)