首先要先看看后端传过来的是一些什么东西,要是传过来的就不对那岂不是枉费功夫
这是传过来正确格式也就是可以接收的格式(blob类型)
下面这种错误的格式,但不是数据出错,是类型。所以必须指定类型才能正确显示
如果不用考虑安全性并不需要token验证可以直接下载:
window.location="请求后端的地址";
直接上代码
// 请求后端接口
downloadInsiderExcel(projectId) {
return this.$http.get(`/projects/${projectId}/insiders/out-excel`, {
responseType: 'blob', // 一定要设置返回值类型,不然文件下载后打不开会报错!!!
});
},
// 获取文件名称
getFileName(res) {
let fileName = '';
let disposition = res.headers['content-disposition'];
const filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
let matches = filenameRegex.exec(disposition);
if (matches != null && matches[1]) {
fileName = matches[1].replace(/['"]/g, '');
}
return fileName;
},
// 下载文件
exportFile(res) {
let blob = new Blob([res.data], { type: res.data.type });
let downloadElement = document.createElement('a');
let href = window.URL.createObjectURL(blob); //创建下载的链接
downloadElement.href = href;
downloadElement.download = decodeURI(this.getFileName(res)); //下载后文件名
document.body.appendChild(downloadElement);
downloadElement.click(); //点击下载
document.body.removeChild(downloadElement); //下载完成移除元素
window.URL.revokeObjectURL(href); //释放掉blob对象
},
// 调用后端请求接口
downloadExcel() {
this.downloadInsiderExcel(this.projectId)
.then((res) => this.exportFile(res))
.catch(() => {});
},
有问题欢迎留言~