先说重点: 无论post还是get请求,一定要在请求方法中加上
responseType: "blob"
代码:
//先封装一个方法
exportFile(content, customFileName, type) {
let filename = content.filename || customFileName;
let URL = window.URL || window.webkitURL;
let objectUrl = URL.createObjectURL(content);
let a = document.createElement("a");
a.href = objectUrl;
a.download = filename; //这步要注意 filename要写成 '文件名.xlsx'
document.body.appendChild(a);
a.click();
a.remove();
},
//请求接口,调用方法,这里用原生展示,如果是封装的axios,在url下加一个属性 responseType: "blob" 即可
axios({
url,
method: 'get',
responseType: 'blob', // 必须项,axios会将文件流转为blob
}).then(res => {
this.exportFile(res, '测试文件.xlsx') // 这是刚刚在上面封装的公共的导出方法。
})
如果不加 responseType: ‘blob’ 可能下载出来的文件只有一个undefined