- 后端返回文件流的是一大串看不懂的xxxxxxx
- 我们需要在请求头加 responseType: 'blob'即可,这样返回的就可以通过a标签下载了
这里考虑的下载需要文件名,返回结果没办法取名称,所以通过响应头返回,上面通过响应头获取字段(可能出现编码不对乱码情况)
需要后台在响应头放开你想要获取的字段名,Access-Control-Expose-Headers : 'fileName'
axios({
method: 'post',
url: '/user/12345',
data: {
firstName: 'Fred',
lastName: 'Flintstone'
},
// 文件流
responseType: 'blob'
}).then(res => {
// 取出响应头
const { headers, data } = res;
const url = URL.createObjectURL(data);
const a = document.createElement("a");
a.setAttribute("href", url);
// 这里我定义了响应头名称为filename
a.download = headers.filename;
document.body.appendChild(a);
a.click();
a.remove();
URL.revokeObjectURL(url);
})