【发布时间】:2011-07-08 18:04:45
【问题描述】:
是否可以通过 JS 或 Javascript 强制下载,即网页不应在浏览器的新选项卡中打开文件,而是弹出让用户选择“另存为”或使用 ???
【问题讨论】:
-
确实如此。一个有用的重复的好例子,因为问题标题的措辞完全不同,即使它谈论的是同一件事。
标签: javascript jquery
是否可以通过 JS 或 Javascript 强制下载,即网页不应在浏览器的新选项卡中打开文件,而是弹出让用户选择“另存为”或使用 ???
【问题讨论】:
标签: javascript jquery
不,这是不可能的,感谢上帝,这不可能。否则,当您在不知情的情况下访问网站时,您的计算机上可能会存储哪些类型的文件。
正如@Paul D. White 在 cmets 部分中指出的那样,如果要使用与其关联的默认程序内联(在浏览器中)打开文件,则可以让服务器发送 Content-Disposition HTTP 标头。例如:
Content-Disposition: inline; filename=foo.pdf
【讨论】:
content-disposition: attachment)来完成的。一旦页面在客户端中打开,根据定义,HTTP 响应已经被处理。
不,仅使用 JQuery/JavaScript 是不可能的。
您将需要一个服务器端脚本,它会返回带有Content-Type(HTTP 标头)的文件,这将强制浏览器下载您请求的文件。 Content-Type 的可能值是 application/force-download。
【讨论】:
您不能从 JavaScript 强制执行该行为,需要在服务器端设置 HTTP 标头:
Content-disposition=attachment; filename=some.file.name
解决问题的方法是让你的 AJAX 方法将用户重定向到 PDF 的 URL:
location.replace('path/to.pdf');
(PDF必须设置上述HTTP头)
更新
在给出这个答案的时候,这是不可能的。现在是,向下滚动查看the other answer saying so。
【讨论】:
<a href="https://i.imgur.com/IskAzqA.jpg" download>,它将无法按预期工作。此处的弃用和删除公告:developers.google.com/web/updates/2018/02/…
随着 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 评论后编辑下载属性
【讨论】:
X-Frame-Options: SAMEORIGIN 等标头限制时,您指定的下载值将被忽略。
动态创建链接并点击下载属性强制下载为文件:
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
【讨论】: