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('下载失败!请重试!')
- })