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

Flutter Firebase Storage上传报object-not-found错误排查

问题背景

Flutter项目接入Firebase Storage实现文件上传功能,使用的依赖版本如下:

  • firebase_storage: ^10.3.1
  • firebase_core: ^1.19.1

初始实现的文件上传代码:

Future<String> uploadFile(File _image) async {
  int uploadTimestamp = DateTime.now().millisecondsSinceEpoch;
  Reference ref = FirebaseStorage.instance.ref().child('posts/$uploadTimestamp');
  UploadTask uploadTask = ref.putFile(_image);
  final TaskSnapshot taskSnapshot = await uploadTask.whenComplete(() {});
  final url = await taskSnapshot.ref.getDownloadURL();

  return url;
}

执行上传操作时抛出错误:

[firebase_storage/object-not-found] No object exists at the desired reference.
错误提示:目标引用路径下不存在对应存储对象,无法正常获取文件的下载访问地址。

故障原因

核心问题出在对UploadTask的等待逻辑上:

  1. whenComplete方法仅会在上传任务的Future触发完成回调时执行后续逻辑,不会校验上传任务的实际执行状态,也不会拦截上传过程中的异常。如果文件还在传输中、或者上传过程中触发了网络错误/权限错误导致上传失败,代码会直接走到获取下载链接的逻辑,此时存储桶中还没有对应的文件,自然会抛出对象不存在的错误。
  2. 代码未做上传前的文件有效性校验、未捕获上传阶段的异常,出现本地文件损坏、路径无写入权限、存储配额耗尽等问题时,也会触发同类错误。
修复方案
  1. 调整上传等待逻辑,去掉whenComplete的写法,直接await上传任务获取TaskSnapshot,同时增加上传状态校验、异常捕获逻辑,确认文件上传成功后再请求下载链接。
    修复后的代码如下:
Future<String> uploadFile(File _image) async {
  // 上传前先校验本地文件是否存在
  if (!await _image.exists()) {
    throw Exception('待上传的本地文件不存在');
  }
  int uploadTimestamp = DateTime.now().millisecondsSinceEpoch;
  Reference ref = FirebaseStorage.instance.ref().child('posts/$uploadTimestamp');
  try {
    // 直接等待上传任务执行完成,失败会直接抛出Firebase异常
    final TaskSnapshot taskSnapshot = await ref.putFile(_image);
    // 校验上传状态为成功后再获取下载地址
    if (taskSnapshot.state == TaskState.success) {
      final String downloadUrl = await taskSnapshot.ref.getDownloadURL();
      return downloadUrl;
    }
    throw Exception('文件上传未完成,当前状态:${taskSnapshot.state}');
  } on FirebaseException catch (e) {
    // 可按需处理上传阶段的各类异常,比如网络错误、权限不足、配额耗尽等
    rethrow;
  }
}
  1. 额外排查项:
  • 确认Firebase Storage控制台已初始化完成,存储桶处于正常可用状态
  • 确认Firebase Storage安全规则给当前操作用户开放了对应路径的写入权限,测试阶段可临时配置规则为认证用户可读写,快速排除权限拦截问题
  • 确认本地待上传文件大小没有超过Firebase Storage的配额或配置的单文件大小上限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:39:15