是否可以通过JS或Javascript强制下载,即网页不应该在浏览器的新选项卡中打开文件,而是弹出让用户选择“另存为”或打开???
答案 0 :(得分:47)
随着HTML5的出现,你可以在锚标签中使用新的属性下载。
代码看起来像
<a download="name_of_downloaded_file" href="path/to/the/download/file"> Clicking on this link will force download the file</a>
适用于firefox和chrome最新版本。我应该提一下我没有在IE中查看它吗? :P
在sstur评论后编辑了下载属性
答案 1 :(得分:17)
动态创建链接,然后单击下载属性以强制下载为文件:
var anchor = document.createElement('a');
anchor.href = this.props.download_url;
anchor.target = '_blank';
anchor.download = this.props.file_name;
anchor.click();
请注意我甚至没有将它添加到DOM中,所以它很快。
P.S download
属性不适用于IE。但它只会在新标签中打开链接。
http://caniuse.com/#feat=download
答案 2 :(得分:14)
您无法通过JavaScript强制执行该行为,需要在服务器端设置HTTP标头:
Content-disposition=attachment; filename=some.file.name
解决问题的方法是让您的AJAX方法将用户重定向到PDF的URL:
location.replace('path/to.pdf');
(必须为PDF设置上述HTTP标头)
<强>更新强>
在回答这个问题时,这是不可能的。现在是,向下滚动查看the other answer saying so。
答案 3 :(得分:4)
不,这是不可能的,感谢上帝不是。否则,当您在不知情的情况下访问网站时,我会让您想象您的计算机上可以存储哪些文件。
正如@Paul D. White在评论部分所指出的,如果你想用内置的(在浏览器内部)打开文件,你可以让服务器发送Content-Disposition HTTP头。例如:
Content-Disposition: inline; filename=foo.pdf
答案 4 :(得分:3)
仅限JQuery / JavaScript,这是不可能的。
您需要一个服务器端脚本,该脚本会返回带有Content-Type
(HTTP标头)的文件,该脚本将强制浏览器下载您请求的文件。 Content-Type
的可能值为application/force-download
。