从接受后端传过来excel表格的文件流并下载,下载后文件报错问题

首先要先看看后端传过来的是一些什么东西,要是传过来的就不对那岂不是枉费功夫

这是传过来正确格式也就是可以接收的格式(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(() => {});
},

 有问题欢迎留言~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值