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

Flutter中无法捕获Firebase Storage权限拒绝异常求助

解决Firebase Storage上传权限异常无法捕获的问题

你的代码无法捕获异常的核心原因是:仅创建了UploadTask但未等待上传任务完成。putData返回的是一个异步任务对象,代码直接执行return true,没有等待上传操作完成,因此上传过程中抛出的异常不会进入当前的try/catch块,只会在后台输出错误日志。

修复后的代码

Future<bool> uploadDataToStorage(String user, String jsonData) async {
  try {
    final now = DateTime.now();
    final formatter = DateFormat.yMMMMd().add_jm();
    final formattedDateTime = formatter.format(now);

    final storage = FirebaseStorage.instance;
    final Reference storageRef =
        storage.ref().child('backup/${user}_backup.json');

    FirebaseStorage.instance.setMaxUploadRetryTime(Duration(seconds: 2));

    Uint8List data = Uint8List.fromList(utf8.encode(jsonData));
    final UploadTask uploadTask = storageRef.putData(data);
    
    // 等待上传任务完成,异常会在此处被抛出并捕获
    await uploadTask;

    return true;
  } catch (error) {
    print('Data upload error: $error');
    return false;
  }
}

补充说明

如果需要获取上传结果(如下载URL),可以进一步处理TaskSnapshot:

final TaskSnapshot snapshot = await uploadTask;
final String downloadUrl = await snapshot.ref.getDownloadURL();
// 处理下载URL

这样修改后,上传过程中包括权限拒绝在内的异常都会被try/catch块捕获,你可以在catch分支中处理错误逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 19:42:47