引言
在前端开发中,经常会遇到需要从后端接口下载文件的需求。当后端返回的响应头中 Content-Type 为 application/octet-stream 时,表示这是一个二进制流文件,浏览器无法直接展示,需要前端处理后下载到本地。
基本实现原理
application/octet-stream 是应用程序文件的默认值,表示未知的应用程序文件类型。浏览器遇到这种类型时,会将其视为二进制文件并触发下载行为。前端处理这类文件的核心步骤是:
- 通过请求获取二进制数据
- 将数据转换为 Blob 对象
- 创建临时 URL 并触发下载
- 释放内存资源
方法一:使用 fetch API 和 Blob
这是目前最推荐的方式,适用于现代浏览器:
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.click();
..(a);
..(downloadUrl);
} (error) {
.(, error);
}
}

