前端下载的EXCEL文件无法打开的解决办法
根据工作需要,要下载一个excel文件模板,但下载的文件报错,打不开,如下:
检查了下载的代码,均没问题,出现这个问题的主要原因原来是需要在接口中加一个responseType,类型要为blob,这个非常重要,必须要,因为我这儿是封装好的接口,所以我直接在这里加上这句就可以,代码如下:
下载方法封装:
//普通下载
/**
* @description 接收数据流生成 blob,创建链接,下载文件
* @param {Function} api 导出表格的接口 (必传)
* @param {Object} params 导出的参数 (默认{})
* @param {String} filename 导出的文件名 (必传)
* @param {Boolean} isNotify 是否有导出消息提示 (默认为 true)
* @param {String} fileType 导出的文件格式 (默认为.xlsx)
* */
const downloadFile = async (
api,
filename,
fileType: string = '.xlsx',
params: any = {},
isNotify: boolean = false,
) => {
if (isNotify) {
ElNotification({
title: '温馨提示',
message: '如果数据庞大会导致下载缓慢哦,请您耐心等待!',
type: 'info',
duration: 3000,
});
}
const res = await api(params);
const blob = new Blob([res]);
saveAs(blob, filename, fileType);
};
const saveAs = (blob, filename, fileType) => {
const link = document.createElement('a');
const body = document.querySelector('body');
link.href = window.URL.createObjectURL(blob);
link.download = fileType ? `${filename}${fileType}` : `${filename}`;
link.style.display = 'none';
body.appendChild(link);
link.click();
body.removeChild(link);
window.URL.revokeObjectURL(link.href);
};