如何从 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 存储下载 URL 中删除查询字符串
Firebase:如何获取不匹配图像的差异并从存储中删除图像
如何从 Firebase 存储中获取调整大小的图片下载 URL