前端发一个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);
});
}
前端可以通过一个下载按钮触发这个函数,然后完成下载。
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答4.9k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
一种是 location.url ,配合的请求头因该是'Content-Type': 'application/octet-stream',但是ajax并不会识别这个请求,原因我就不清楚了,你看下上一个人的回答。如果已经通过fetch获取到资源了,可以通过URL.createObjectURL生成资源的内容url。URL.createObjectURL()用法,这个时候你可以创建a标签,然后绑定这个url,并用js调用点击方法,也可以达到下载的目的。