前端发一个fetch请求,get或者post,服务端返回一个文件,怎么设置http的响应头可以使浏览器开始下载任务。
之前遇到过这个问题,写过一个函数:
export async function downloadFile(params) {
return postJson('/api/for/download', params, 'blob').then((res) => {
let url = URL.createObjectURL(new Blob([res]));
let filename = `${params.xxx}.xlsx`; // 这里根据你的实际文件情况替换
let a = document.createElement('a');
a.href = url;
a.download = filename;
a.click();
URL.revokeObjectURL(url);
});
}
前端可以通过一个下载按钮触发这个函数,然后完成下载。
13 回答12.7k 阅读
8 回答2.5k 阅读
2 回答5k 阅读✓ 已解决
7 回答1.9k 阅读
3 回答2.2k 阅读✓ 已解决
5 回答786 阅读
3 回答2.5k 阅读✓ 已解决
一种是 location.url ,配合的请求头因该是'Content-Type': 'application/octet-stream',但是ajax并不会识别这个请求,原因我就不清楚了,你看下上一个人的回答。如果已经通过fetch获取到资源了,可以通过URL.createObjectURL生成资源的内容url。URL.createObjectURL()用法,这个时候你可以创建a标签,然后绑定这个url,并用js调用点击方法,也可以达到下载的目的。