前后端分离的项目,前端大部分使用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 []; }