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
相关产品推荐
相关产品推荐

