基本上有两种流行的下载文件的方式。
1套window.location
设置
window.location为下载网址将下载文件。
window.location = '/path/to/download?arg=1';
与此版本略有不同的是,打开带有下载路径的新标签页
window.open('/path/to/download', '_self');2.虚拟链接请点击
使用HTML5,您可以指定
download链接的属性。单击链接(甚至以编程方式)将触发该URL的下载。链接甚至不需要成为DOM的一部分,您可以动态地使它们。
var link = document.createElement('a');link.href = '/path/to/download';link.download = 'local_filename.csv';var e = document.createEvent('MouseEvents');e.initEvent('click', true, true);link.dispatchEvent(e);并非所有浏览器都支持此功能,因此,即使您要使用此方法,也必须放弃对某些浏览器的支持或回退到第一种方法。
幸运的是,这个出色的答案引用了一个很棒的小
js图书馆,它已经完成了所有这些工作-
http:
//pixelscommander.com/polygon/downloadjs/#.VrGw3vkrKHv
downloadFile('/path/to/download');两步下载
您经常会看到的另一种约定是两步下载,即以已知的URL将信息发送到服务器,然后服务器发回生成的URL或ID,可用于下载文件。
如果您希望url是可以共享的内容,或者必须将大量参数传递给下载生成器,或者只是想通过
POST请求进行操作,则这很有用。
$.ajax({ type: 'POST', url: '/download/path/generator', data: {'arg': 1, 'params': 'foo'}, success: function(data, textStatus, request) { var download_id = data['id']; // Could also use the link-click method. window.location = '/path/to/download?id=' + download_id; }});


