直接上代码
请求
axios({
url: '/url',
responseType: 'blob',
method: 'post',
data: {}
})
响应处理
const aLink = document.createElement('a');
//Blob中的type有很多,这里是下载excel中的xlsx
const blob = new Blob([res],{type:'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'});
aLink.href = window.URL.createObjectURL(blob);
aLink.setAttribute('download', "excel.xlsx"); // 下载文件名称
aLink.click();
window.URL.revokeObjectURL(aLink.href); // 释放URL对象
网上大多数都是这样处理,本应没啥问题
结果问题来了,后端返回的data里是一段乱码的字符串
然后各种尝试,一开始使用了axios.create封装的方法发起的请求,后来怀疑封装影响了,遂改为axios直接发请求,结果还是一样,又怀疑axios也被污染了,改为了fetch发请求,结果成功了,在后端要改接口的最后一刻接口成功下载excel,并且还能正常打开,这就很nice了😀😀😀
然而,疑问来了,why?
又去网上搜,终于发现猫腻
mock模块会影响原生的ajax请求,使得服务器返回的blob类型变成乱码
于是没啥好说的,注释掉mock.js