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

ReactJS中通过API获取图片后无法在<img>标签显示的问题

问题排查与修复方案

你的代码有几个关键问题导致图片无法显示,逐一修正即可:

1. responseType 配置位置错误

responseType 是 Axios 请求配置的顶层属性,不是 headers 的子属性。你把它放在 headers 里,Axios 不会识别这个配置,导致返回的不是正确的 arraybuffer 格式数据,后续转 base64 自然出错。

2. catch 代码语法错误

你的 catch 块里写了多余的箭头函数 error => {console.log(error)},这会导致错误捕获逻辑失效,应该直接处理 error 参数:

catch (error) { console.log(error) }

3. 浏览器环境不支持 Node.js 的 Buffer

Buffer.from 是 Node.js 专属 API,浏览器里没有这个对象,需要用浏览器原生方式把 arraybuffer 转成 base64:

  • 先把 arraybuffer 转成 Uint8Array
  • 再转成二进制字符串
  • 最后用 btoa() 编码成 base64

4. 图片 MIME 类型不匹配

你的 API 返回的是 .png 图片,但你拼接的 data URI 用了 image/jpeg,类型不匹配会导致浏览器无法解析图片,应该改成 image/png。


修正后的完整代码

const getPhoto = async ({ jwtToken }) => {
    const apiEndpoint = 'http://localhost:8000/resources/photos/default.png';
    const config = {
        headers: {
            'Authorization': `Bearer ${jwtToken}`
        },
        responseType: 'arraybuffer' // 移到顶层配置
    };
    try {
        const response = await axios.get(apiEndpoint, config);
        
        // 浏览器环境下的 arraybuffer 转 base64 方法
        const uint8Array = new Uint8Array(response.data);
        let binary = '';
        uint8Array.forEach(byte => {
            binary += String.fromCharCode(byte);
        });
        const base64 = btoa(binary);
        
        return `data:image/png;base64,${base64}`; // 匹配图片实际类型
    } catch (error) {
        console.log(error); // 修正 catch 语法
    }
};

调用代码保持不变:

setImage(await getPhoto({ jwtToken }));

然后用 <img src={image} /> 就能正常显示图片了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 01:34:58