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

React Native(Expo)中如何显示从MS Graph获取的Blob图片?

解决React Native中MS Graph Blob图片无法显示的问题

嘿,我来帮你搞定这个问题!你遇到的核心问题是React Native的<Image>组件没法直接使用Blob对象或者原始的Response对象作为图片源,得做两步转换才能正常显示。

问题根源

你当前的代码只是把fetch返回的Response对象存在了状态里,但这个对象不是实际的Blob数据;而且就算拿到了Blob,React Native也不支持直接将Blob作为uri传入Image组件——它只认网络URL、本地文件路径或者data:开头的Base64格式URI。

修正后的完整代码

1. 正确获取并转换Blob为Base64 URI

fetch('https://graph.microsoft.com/v1.0/me/photo/$value', {
  headers: { 'Authorization': "Bearer " + accessToken },
})
// 第一步:将响应转换为Blob对象
.then((response) => response.blob())
// 第二步:将Blob转换为Base64格式的data URI
.then((blob) => {
  const fileReader = new FileReader();
  fileReader.onloadend = () => {
    // fileReader.result 就是形如 data:image/jpeg;base64,xxxxxx 的字符串
    this.setState({ imageDataUri: fileReader.result });
  };
  fileReader.readAsDataURL(blob);
})
.catch((error) => {
  console.error('获取图片失败:', error);
});

2. 正确渲染图片

<Image 
  source={{ uri: this.state.imageDataUri }}
  style={{ height: 200, width: null, flex: 1 }}
  resizeMode="contain" // 建议加上,确保图片按比例缩放显示
/>

额外注意事项

  • 如果你的图片体积较大(比如超过1MB),使用Base64可能会带来内存占用过高的问题,这时候可以考虑用react-native-fs等库将Blob保存到本地文件系统,然后用file://路径引用图片。
  • MS Graph返回的用户照片默认是JPEG格式,FileReader.readAsDataURL会自动识别并添加正确的MIME类型前缀,无需手动指定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:07:08