1、window.open()
弹出新窗口下载,需要用户进行交互之后触发,否则会被拦截,Safari始终会拦截弹窗
2、a标签下载
不会触发弹窗,更安全
let a = document.createElement('a')
a.href = '下载链接';
a.download = '文件名称';
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
3、直接JS读取文件流
此方式适用于无法直接获得下载链接,后端直接返回文件流的情况
axios.get(durl,{ responseType: 'blob' }).then(rstream => {
let name = '文件名';
let b = new Blob([rstream.data]);
let URL = window.URL ? window.URL : window.webkitURL;
let url = URL.createObjectURL(b);
let link = document.createElement('a');
link.href = url;
link.download = name;
document.body.appendChild(link);
link.click();
URL.revokeObjectURL(url)
document.body.removeChild(link)
}).catch(e=>{
console.log(e);
alert('下载失败!请重试!')
})