Fetch 获取 Blob 数据需调用 response.blob() 解析响应体,再通过 URL.createObjectURL 创建临时链接下载或 FileReader 读取内容;Blob 是二进制封装,含 type 和 size 属性,不可直接当字符串处理。

Fetch 获取 Blob 数据时,核心是用 response.blob() 解析响应体,再通过 URL.createObjectURL 创建临时链接或 FileReader 读取内容。关键在于理解 Blob 是二进制数据的封装,不能直接当字符串处理。
获取并解析 Blob 响应
发起请求后调用 response.blob(),它返回一个 Promise,解析完成后得到 Blob 对象:
- 确保请求头未强制指定
Content-Type为 JSON 或文本,否则服务端可能不返回二进制内容 - Blob 对象自带
type(如"image/png")和size属性,可用来校验 - 如果接口返回的是文件流(比如 PDF、Excel),通常 Content-Type 是
application/octet-stream或对应 MIME 类型
下载 Blob 数据到本地
最常见需求是触发浏览器下载:
- 用
URL.createObjectURL(blob)创建临时 URL - 创建隐藏的
<a>标签,设置href和download属性(后者指定文件名) - 调用
a.click()触发下载,最后用URL.revokeObjectURL(url)释放内存
读取 Blob 内容进行预览或处理
需要显示图片、播放音频/视频,或解析 Excel、PDF 等内容时:
立即学习“Java免费学习笔记(深入)”;
- 图片/音视频:直接赋值给
<img src="blob:url">或<video src="blob:url"> - 文本类 Blob(如 CSV、日志文件):用
new FileReader()的readAsText()方法转成字符串 - 结构化数据(如加密或压缩文件):配合
ArrayBuffer和Uint8Array进行底层操作,例如用 SheetJS 解析 Excel
处理大文件或流式加载(可选进阶)
默认 Fetch 会等整个响应完成才生成 Blob,对大文件不友好。可用 response.body 获取 ReadableStream:
- 用
response.body.getReader()分块读取,适合边接收边渲染或进度提示 - 注意:流只能读一次,且不能同时调用
blob()和body.getReader() - 需手动拼接 chunks 并构造新 Blob,或直接写入
WritableStream(如 Service Worker 缓存场景)


















