通过js或查询强制下载
是否有可能强制通过JS或Javascript的下载,即网页不应该在浏览器的新标签中打开文件,而是popup让用户select“另存为”或打开???
您不能强制JavaScript的行为,需要在服务器端设置HTTP头:
Content-disposition=attachment; filename=some.file.name
您可以解决问题的方法是让您的AJAX方法将用户redirect到PDF的URL:
location.replace('path/to.pdf');
(上面的HTTP标题必须设置为PDF)
随着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发表评论后,编辑下载属性
dynamic创build链接并点击下载属性强制下载文件:
var anchor = document.createElement('a'); anchor.href = this.props.download_url; anchor.target = '_blank'; anchor.download = this.props.file_name; anchor.click();
请注意,我甚至没有将它添加到DOM,所以它很快。
PS download
属性将无法使用IE浏览器。 但它只会打开新标签中的链接。 http://caniuse.com/#feat=download
不,这是不可能的,也不要感谢上帝。 否则,我会留下你的想象力,什么样的文件可以存储在您的计算机上,当你访问一个网站,而你不知道。
正如@Paul D. White在评论部分指出的,如果您想要使用默认程序打开文件(在浏览器内部),您可以让服务器发送Content-Disposition HTTP标头。 例如:
Content-Disposition: inline; filename=foo.pdf
不,这是不可能的,只有JQuery / JavaScript。
您将需要一个服务器端脚本,它会返回您的文件与Content-Type
(HTTP标头),这将强制浏览器下载您请求的文件。 Content-Type
可能的值是application/force-download
。