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

ReactJS中Blob转图片问题:控制台URL显示空白图片

解决Blob格式头像显示空白的问题

问题根源

你后端返回的不是二进制图片流,而是把Node.js的Buffer对象序列化成了JSON(就是Postman里看到的{"type":"Buffer","data":[...]})。前端拿到这个JSON后直接转Blob,自然是无效的图片数据,所以显示空白。

两种解决办法

方法一:修正后端代码(推荐)

后端应该直接返回二进制图片数据,同时设置正确的Content-Type响应头。比如Node.js/Express环境下可以这么写:

// 假设从数据库取出的是buffer类型的imageData
app.get('/getImage', (req, res) => {
  // 从数据库获取图片二进制数据和对应的内容类型
  const imageData = ...; // 你的Blob格式数据库数据
  const contentType = ...; // 比如'image/png'或'image/jpeg'
  res.set('Content-Type', contentType);
  res.send(imageData); // 直接发送二进制数据,不要转JSON
});

这样前端原代码就能正常工作,axios会收到真正的二进制buffer,转Blob后生成的URL就能正确渲染图片。

方法二:前端适配(后端暂时无法修改时用)

如果后端没法调整,前端需要把返回的JSON里的data数组转成Uint8Array,再生成Blob:

axios.get("http://localhost:3030/getImage", {
  headers: { authorization: `${authHeader()}` },
  // GET请求参数要放在params里,不是单独的body参数
  params: { key: "value" }
})
.then((response) => {
  // 取出JSON里的data数组
  const bufferArray = response.data.data;
  const contentType = response.headers["content-type"];
  // 把数组转成Uint8Array格式
  const uint8Array = new Uint8Array(bufferArray);
  const blob = new Blob([uint8Array], { type: contentType });
  const url = URL.createObjectURL(blob);
  setImageSrc(url);
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 19:32:42