Fetch API 的 Blob 响应需按 Content-Type 选择解析方式:text() 用于文本,json() 用于 JSON(推荐直接使用),arrayBuffer() 用于二进制处理;注意编码兼容性与浏览器支持。

Fetch API 返回的 Blob 响应需要根据实际用途选择合适的解析方式,不能直接当文本或 JSON 使用,否则会出错。关键在于先用 Blob.arrayBuffer()、Blob.text() 或 Blob.json()(部分浏览器支持)转成可用格式,再进一步处理。
识别响应类型再决定解析方式
服务端返回的 Content-Type 决定了 Blob 的真实含义,比如 application/json、image/png、application/pdf 或 text/plain。Fetch 不会自动解析 Blob,必须手动调用对应方法:
-
response.blob()得到原始 Blob 对象,适合后续下载、预览或二进制操作 -
response.text()适用于纯文本、HTML、XML、JSON 字符串(但需注意编码) -
response.json()仅适用于合法 JSON 格式,且响应头为application/json时更稳妥 -
response.arrayBuffer()适合图像解码、音频处理、文件校验等底层操作
处理 JSON 类型的 Blob 响应
即使服务端返回的是 JSON 数据,若设了 Content-Type: application/json 但用 response.blob() 获取,就不能直接 .json() —— 必须先转成字符串再解析:
fetch('/api/data')
.then(res => {
if (!res.ok) throw new Error('Network error');
return res.blob();
})
.then(blob => blob.text()) // 先转文本
.then(text => JSON.parse(text)) // 再解析 JSON
.catch(err => console.error(err));
更推荐直接用 response.json(),除非你明确需要中间 Blob(例如记录原始字节或做内容校验)。
处理图片或 PDF 等二进制 Blob
这类响应通常用于显示或下载,不需要转文本:
- 显示图片:
const url = URL.createObjectURL(blob); img.src = url;,用完记得URL.revokeObjectURL(url) - 触发下载:
const a = document.createElement('a'); a.href = URL.createObjectURL(blob); a.download = 'file.png'; a.click(); - 读取图像元数据或缩略图:用
blob.arrayBuffer()配合createImageBitmap()或第三方库(如 piexif)
注意编码与兼容性细节
Blob.text() 默认按 UTF-8 解码,如果接口返回的是 GBK、ISO-8859-1 等编码,需用 response.arrayBuffer() + TextDecoder 手动指定:
fetch('/api/log')
.then(res => res.arrayBuffer())
.then(buf => new TextDecoder('gbk').decode(buf))
.then(text => console.log(text));
另外 Blob.json() 尚未被所有浏览器支持(如 Safari 当前不支持),生产环境建议优先用 response.json() 或 blob.text().then(JSON.parse) 保证兼容性。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











