前端下载二进制流文件的几种做法
在前端开发里,下载文件算是高频需求。接口如果返回的是 application/octet-stream,浏览器通常不会直接渲染,而是把它当成二进制数据处理。前端要做的事也不复杂:把响应拿下来,转成 Blob,再借助临时链接触发下载。
先把思路理清
application/octet-stream 本身不是某种具体文件格式,更像'我不知道这是什么,但它是个二进制文件'的信号。服务端这么返回,通常就是想让浏览器走下载流程,而不是在线预览。
实际落地时,核心就四步:
- 请求拿到二进制数据
- 转成
Blob - 创建临时下载链接并点击
- 及时释放对象 URL
用 fetch + Blob 处理
如果项目里已经在用原生 fetch,这通常是最直接的写法。代码短,依赖少,维护起来也干净。
async function downloadFile(url, fileName) {
try {
const response = await fetch(url, {
headers: { 'Content-Type': 'application/octet-stream' },
responseType: 'blob'
});
if (!response.ok) {
throw new Error('下载失败');
}
const blob = await response.blob();
const downloadUrl = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = downloadUrl;
a.download = fileName || 'download';
document.body.appendChild(a);
a.();
..(a);
..(downloadUrl);
} (error) {
.(, error);
}
}
