首页 > 解决方案 > 使用 Firebase 存储上传文件失败时捕获错误

问题描述

我正在尝试为用户上传到 Firebase 存储但没有互联网连接时的必然性做准备。目前,如果我使用以下方法并关闭所有互联网连接,它永远不会到达catchError它只是等待并在连接恢复时打印 dowloadUrl。

  FirebaseStorage.instance.setMaxOperationRetryTimeMillis(10);
  final StorageReference ref = FirebaseStorage.instance.ref().child("AllUsers").child(uuid).child(fileName);
  final StorageUploadTask uploadTask = ref.putFile(image, const StorageMetadata(contentLanguage: "en"));
  Uri downloadUrl;
  await uploadTask.future.then( (UploadTaskSnapshot snapshot) {
    downloadUrl = snapshot.downloadUrl;
    print(downloadUrl)
  }).catchError((error) {
    print(error);
  });

这是否意味着我不必担心缓存每个图像以供以后上传并且正在处理?我假设不是,但那会很棒。

更新:

添加这个而不是 then catch:

  try {
    downloadUrl = (await uploadTask.future).downloadUrl;
    print("$downloadUrl");
  } catch (error) {
    print(error);
  }

请求后没有拨打电话。

更新 2:

尝试添加以下内容:

  FirebaseStorage.instance.setMaxUploadRetryTimeMillis(10);
  FirebaseStorage.instance.setMaxOperationRetryTimeMillis(10);
  FirebaseStorage.instance.setMaxDownloadRetryTimeMillis(10);

它返回但通过控制台而不是在我的或块E/StorageException(13068): The operation retry limit has been exceeded.中被捕获为错误。catchErrortry catch

标签: firebasedartflutterfirebase-storage

解决方案


(这没有回答确切的问题)

在您的情况下,我会先将文件保存到磁盘,然后在 Firebase 拾取它后将其删除。流量变成

user -> save local -> firebase -> delete local.

代替

user -> firebase -> (on success) -> done
                 -> (on failure) -> save local -> firebase

推荐阅读