要是实现导出文件的下载,本来是前端实现导出,后来要导出全部筛选条件下的数据,所以最终决定让后端实现,后端在返回的时候是一个csv文件,相当于一个blob数据流,所以前端下载逻辑是这样实现的 。
axios({
url: url,
method: 'POST',
responseType: 'blob',
data: searchValues,
}).then(res => {
const data = res.data;
if (data) {
let fileName = '';
const attrs = res.headers['content-type'].split(';');
// eslint-disable-next-line no-plusplus
for (let i = 0; i < attrs.length; i++) {
const temp = attrs[i].split('=');
if (temp.length > 1 && temp[0] === 'fileName') {
fileName = temp[i];
break;
}
}
fileName = decodeURIComponent(fileName);
// 获取数据类型
const type = res.headers['content-type'].split(';')[0];
const blob = new Blob([res.data], { type });
const a = document.createElement('a');
const blobUrl = window.URL.createObjectURL(blob);
a.download = fileName;
a.href = blobUrl;
document.body.appendChild(a);
a.click();
URL.revokeObjectURL(blobUrl);
document.body.removeChild(a);