You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用blob.text()与FileReader均返回Buffer而非字符串问题求助

解决方案

首先明确:标准浏览器环境下Blob.text()返回的是Promise<string>,如果返回Buffer,90%以上的概率是你在Node.js环境使用了兼容类Blob实现(如node-fetch、undici包提供的Blob),不同场景的处理方案如下:


Node.js环境处理

Node.js端的Blob实现未完全对齐W3C标准,Blob.text()返回Promise<Buffer>属于预期行为,直接调用Buffer的toString()方法即可得到字符串:

// 已获取到Blob对象 blob
const buffer = await blob.text();
// 指定编码转换为字符串,默认是utf-8,可根据实际编码调整
const jsonString = buffer.toString('utf8');

// 如需直接转为JSON对象,可直接解析
const result = JSON.parse(jsonString);

优化建议:如果是通过fetch发起的请求,无需手动转Blob,直接调用响应对象的方法更高效:

const response = await fetch('your-api-url');
// 直接获取文本字符串
const jsonString = await response.text();
// 或直接解析为JSON对象
const result = await response.json();

浏览器环境处理

如果是浏览器环境出现该问题,按以下步骤排查处理:

  1. 先验证Blob有效性:打印blob.size,如果值为0说明请求返回空内容,和转换逻辑无关
  2. 显式指定编码使用FileReader转换:
const reader = new FileReader();
reader.onload = function(e) {
  const jsonString = e.target.result;
  // 后续业务处理
};
// 显式指定UTF-8编码,避免响应头编码配置错误导致的乱码/类型异常
reader.readAsText(blob, 'utf-8');

内容的提问来源于stack exchange,提问作者ed4becky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 21:27:03