如何从 URL 中删除 Firebase 存储文件

Posted

技术标签:

【中文标题】如何从 URL 中删除 Firebase 存储文件【英文标题】:How do I delete a Firebase Storage file from URL 【发布时间】:2022-01-02 22:35:23 【问题描述】:

如何使用 URL 作为参考来获取从 Firebase 存储中删除文件的按钮。该 URL 是使用 Firebase 存储 getDownloadUrl 方法从名为 "fileUrl" 的 Firestore 集合字段中检索的。 当我尝试删除时,我收到错误消息并且我的应用崩溃了。

代码:

onPressed: () async 
             if (newsDataModel.get('fileUrl') != null) 
             await FirebaseStorage.instance.refFromURL(newsDataModel.get('fileUrl')).delete();
              else 
               return;
             
             await newsDataModel.reference.delete().then((value) => Navigator.pop(context));

错误:

_AssertionError ('package:firebase_storage/src/firebase_storage.dart': 
 Failed assertion: line 112 pos 12: 'url.startsWith('gs://') || url.startsWith('http')': 
 'a url must start with 'gs://' or 'https://')

【问题讨论】:

读取网址似乎有问题。如果您在使用它之前print(newsDataModel.get('fileUrl')) 它会显示什么? 您可以查看此链接 - ***.com/questions/54170250/… 【参考方案1】:

意识到我犯了一个错误。一些集合的 fileUrl 字段为空/null,因此我正在删除具有 null 值并因此返回错误的集合。

新更新的代码:

onPressed: () async 
          try 
           if (hwDataModel.get('fileUrl') != null) 
            await FirebaseStorage.instance.refFromURL(hwDataModel.get('fileUrl')).delete()
            .then((value) => 
             hwDataModel.reference.delete().then((value) =>
              Navigator.pop(context)));
             else if (hwDataModel.get('fileUrl') == null) 
               await hwDataModel.reference.delete().then(
                (value) => Navigator.pop(context));
             ;
             on FirebaseException catch (error) 
              Fluttertoast.showToast(
               msg: error.message.toString(),
               gravity: ToastGravity.TOP,
               backgroundColor: Colors.red,
               textColor: Colors.white);
             
      ,

【讨论】:

以上是关于如何从 URL 中删除 Firebase 存储文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用颤振删除 Firebase 存储文件?

如何从 Firebase 存储下载 URL 中删除查询字符串

Firebase:如何获取不匹配图像的差异并从存储中删除图像

如何从 Firebase 存储中获取调整大小的图片下载 URL

如何从 Firebase 存储 getDownloadURL 获取 URL

从多个文件上传 Firebase 存储中获取下载 url