前端 下载.xlsx文件 后端返回二进制流文件,前端通过axios 通过Blob 转换excel文件流 下载乱码问题:

383 阅读1分钟

2022712102319.bmp 此时,需要将前端请求文件的ajax请求中加入 responseType: ‘blob’,这样就可以将请求回来的转化为bolb格式。

<div class="exportText">
	<span class="readme">导入前请先下载导入模板,</span><span class="readmeTwo"
	v-hasPermi="['farmers:farmersInfo:export']" @click="handleExport">点击下载导入模板</span>
</div>

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 下载模板  (在 .js文件里)
export function downloadTemplate(params) {
  return request({
    url: '/common/cos/download',
    method: 'get',
    responseType: 'blob',
    params
  })
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function handleExport() {
			let params = {
				delete: false,
				fileName: '/template/客户导入模板.xlsx'
			}
			downloadTemplate(params).then(res => {
				console.log(res, 'res');
				let result = res; //如果后端返回的result是进过Blob处理的,直接 window.URL.createObjectURL(result),如果没有,就需要先实例化new Blod处理之后再window.URL.createObjectURL(blob)。
				let blob = new Blob([result], { type: "application/vnd.ms-excel" });
				let url = window.URL.createObjectURL(blob);
				let link = document.createElement('a');
				link.download = "客户导入模板.xlsx";
				link.href = url;
				link.click();
			}).catch(err => {
				console.log(err)
				// resolveBlob(res, '客户导入模板.xlsx');  //方法在下面
			})
		}