【问题标题】:Flutter: Check the file before delete it in Firebase StorageFlutter:在 Firebase 存储中删除之前检查文件
【发布时间】:2020-06-06 16:51:56
【问题描述】:

我有一个用于从 Firebase 存储中删除文件的功能,如下所示:

void _deleteFileFromStorage(String fileName) async {
  await FirebaseStorage.instance.ref().child(fileName).delete();
}

删除文件成功,但是当要删除的文件在Firebase Storage中不存在时,会报错,会堆栈在delete函数中(_deleteFileFromStorage),不会运行(通过)到函数/到下一个进程,如下所示:

onPressed: () async {
  await _progressDialog.update(message: 'Deleted Resume...');
  await _progressDialog.show();
  await _deleteFileFromStorage(widget.attachmentsEntity.name); // If the file doesn't exist, the process stuck in here
  await _deleteDataFromFirebase(); // This function and below will not run because it causes an error in the delete function (the file does not exist)
  if (widget.resume.length == 1) {
    setState(() {
      choices.add(Choice(title: RESUME, index: 0));
    });
  }
  await _progressDialog.hide();
  Navigation.back(context);
},

所以问题是:

  1. 在执行_deleteFileFromStorage删除文件之前可以先检查文件吗?
  2. 或者如果Firebase Storage中不存在该文件,我只是传递了错误并继续运行下一个进程?

【问题讨论】:

    标签: flutter firebase-storage


    【解决方案1】:

    我在_deleteFileFromStorage 上使用trycatch 修复了它。因此,当文件不存在(错误)时,它将继续运行下一个进程。如果你们有任何选项可以回答这个问题,请回答 1 号或 2 号。就去吧 :)

    【讨论】:

      【解决方案2】:
      try{
      String downloadLink = await storage
              .ref('folder/filename.extension')
               .getDownloadURL();
      }
      catch(error){
      print('file not found');
      }
      

      【讨论】:

        【解决方案3】:

        试试这个:

        var file = storageRef
              .child('fileName');
        
              if(file != null){
                  storageRef
              .child('fileName').delete();
              }else{
               print('Does not exist');
              }
        

        【讨论】:

        • 这行不通。它只是检查引用对象是否不为空。这并不意味着该文件存在于 Cloud Storage 中。
        • 文件名在存储中怎么会不存在..
        • 您可以建立对不存在的文件的引用。这实际上是您执行上传的方式。引用对象只是一个路径,而不是一个实际的文件。
        【解决方案4】:

        您可以在参考上致电getMetadata()。如果它完成并返回一个元数据对象,则该文件存在。如果它产生错误,那么您可以假设该文件不存在,或者客户端没有删除它的权限。

        就个人而言,我只会记录来自delete() 的错误并继续前进。

        【讨论】:

        猜你喜欢
        • 2020-05-10
        • 2016-02-10
        • 2021-07-02
        • 1970-01-01
        • 2021-07-07
        • 1970-01-01
        • 2018-11-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多