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

Flutter使用firebase_storage 8.0.4版本删除文件报object-not-found错误

问题根因

该报错与存储权限、目标文件是否存在无关,核心是firebase_storage 8.0.4版本调整了SDK的引用构造逻辑:

  • 旧版本SDK存在隐式兼容:将完整可访问的文件下载URL传入ref()方法时,SDK会自动从URL中解析出存储桶内部的相对对象路径,构造合法引用
  • 8.0.4版本移除了该兼容逻辑,ref()方法现在仅接受存储桶内部的相对路径作为入参;如果传入http/https开头的完整外网URL,SDK会把整段URL字符串当成相对路径查找对象,自然无法匹配到对应文件,触发object-not-found异常
  • 你打印的fullPath输出为完整的图片访问链接,直接印证了该问题:合法存储引用的fullPath应为不带域名、不带查询参数的内部路径格式。
修复方案
  • 凡是入参为完整外网文件URL的场景,禁止直接传给ref(),改用SDK提供的refFromURL()方法解析构造合法引用
  • 正确代码示例:
// 原有错误写法
// Reference s = _storage.ref("传入完整的图片访问URL");

// 替换后正确写法
String fullImageUrl = "对应目标文件的完整可访问URL";
Reference s = _storage.refFromURL(fullImageUrl);

// 此时打印的fullPath应为内部相对路径,如"uploads/2024/avatar.jpg"
print(s.fullPath);

// 执行删除操作,补充异步等待与异常捕获
try {
  await s.delete();
} catch (e) {
  // 处理其他类型的删除异常
}
  • 全量排查项目内所有ref()方法的调用位置,凡是入参以http:///https://开头的代码,全部替换为refFromURL()的解析逻辑,避免同类问题。

注意:无需调整Firebase Storage安全规则,你可以通过URL正常打开对应图片,说明文件本身存在、权限配置正常,问题仅为代码层面的存储引用构造逻辑错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 19:45:07