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

Supabase Storage下载异常:Blob转ArrayBuffer失败求助

解决React Native中Supabase下载Blob转ArrayBuffer报错问题

问题原因

React Native环境中,Supabase JS SDK返回的下载结果result.data并非浏览器标准的Blob对象,而是SDK自定义的Blob实例(从你打印的{"size":1650788,"offset":0,"blobId":"xxx",...}可以看出),这个自定义实例没有实现标准的arrayBuffer()方法,所以调用时会抛出TypeError: undefined is not a function错误。

解决方案

方法1:通过签名URL + fetch获取标准ArrayBuffer

绕开Supabase自定义Blob的限制,直接通过签名URL用fetch获取资源,再转换为ArrayBuffer:

// 生成临时签名URL(有效期可自行调整,这里设为60秒)
const { data: signedUrl, error: urlError } = await supabase.storage
  .from("images")
  .createSignedUrl(`${user_id}/${image_id}`, 60);

if (urlError) {
  console.error("获取签名URL失败:", urlError);
  return;
}

// 用fetch拉取资源并转ArrayBuffer
try {
  const response = await fetch(signedUrl);
  const buffer = await response.arrayBuffer();
  console.log("Image ArrayBuffer:", buffer);
  // 这里可以使用buffer做后续处理
} catch (error) {
  console.error("转换ArrayBuffer失败:", error);
}

方法2:升级Supabase SDK到最新版本

部分旧版本的Supabase SDK在React Native环境下的Blob实现存在兼容性问题,尝试升级到最新版:

npm install @supabase/supabase-js@latest
# 或使用yarn
yarn add @supabase/supabase-js@latest

升级后再尝试原代码,如果问题仍存在,优先使用方法1。

补充说明

如果你的需求是显示图片而非处理ArrayBuffer,直接使用生成的签名URL作为Image组件的source即可,无需转换:

<Image source={{ uri: signedUrl }} style={{ width: 200, height: 200 }} />

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 07:10:04