前后端分离的项目,前端大部分使用fetch调用接口,遇到下载的时候,服务器接口一般直接返回流文件(链接本身就是一个文件)
export const getExport = async (url, postData) => {
let options = null
if (postData) {
options = _headerOptions('POST')
options.headers['content-type'] = 'application/json'
options.body = JSON.stringify(postData)
} else {
options = _headerOptions('GET')
}
let response = await fetch(config.apiHost + url, options)
response.blob().then((blob) => {
const a = window.document.createElement('a');
const downUrl = window.URL.createObjectURL(blob);// 获取 blob 本地文件连接 (blob 为纯二进制对象,不能够直接保存到磁盘上)
const m = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/.exec(response.headers.get('Content-Disposition'));
const filename = m[1].replace(/['"]/g, '');
// console.log(decodeURI(escape(filename[0])))
a.href = downUrl;
a.download = filename;
a.click();
window.URL.revokeObjectURL(downUrl);
});
return [];
}