我从 Firestore 中删除了我的文档,相应的图像仍保留在存储中
Posted
技术标签:
【中文标题】我从 Firestore 中删除了我的文档,相应的图像仍保留在存储中【英文标题】:Wen i delete my document from Firestore the corresponding image still remain in Storage 【发布时间】:2021-12-20 09:19:28 【问题描述】:我是 Flutter 的新手,我面临一个问题是如何删除 Firestore 照片。
我创建了一个子集合,用于存储我的产品详细信息,该产品还包含一个存储在 Firebase 存储中的图像。如果删除我的产品,比如我有 10 个产品,但我想删除特定产品,当我按下 删除按钮 时,它会删除我的产品,这是一个 文档,但是它不会从 Firebase 存储中删除相应的图像。
我尝试了一些方法,但它不起作用,它只是删除了我的 Cloud Firestore 文档,但照片仍保留在 Firebase 存储中。
我正在使用图片 URL 来显示照片。我希望当我点击我的 delete 按钮时,它也会从 Firebase Storage 中删除相应的图像。所以我用它来删除我的 Cloud Firestore 文档。
TextButton(
onPressed: () async
await FirebaseFirestore.instance
.collection('users')
.doc(LoginUser!.uid)
.collection('products')
.doc(document.id)
.delete()
.then((value) async
//await FirebaseStorage.instance.ref().child('productImage').child('productImageUrl').delete();
print(
'Product Deleted But image is still there in Storage Folder');
);
,
child: Text('Delete')),
我正在使用此代码将我的图片网址保存在 Cloud Firestore
final productImgRef = FirebaseStorage.instance
.ref()
.child('productImage')
.child(FirebaseUser.uid +time +'.jpg');
await productImgRef.putFile(pickImageFile!);
var productImageUrl = await productImgRef.getDownloadURL();
await FirebaseFirestore.instance
.collection('users')
.doc(FirebaseUser.uid)
.collection('products')
.add(
'productName': _productName,
'productDes': _productDes,
'bidPrice': _bidPrice,
'auctionDate': _auctionDate,
'submitBy': userName,
'productImageUrl': productImageUrl,
);
【问题讨论】:
【参考方案1】:假设这条注释掉的行是你尝试的:
await FirebaseStorage.instance.ref().child('productImage').child('productImageUrl').delete();
'productImageUrl'
周围的引号是一个错误。使用此代码,它会尝试删除名为productImageUrl
的图像,这不是您的图像名称。
至少应该是这样的:
await FirebaseStorage.instance.ref().child('productImage').child(productImageUrl).delete();
通过删除productImageUrl
周围的引号,代码将使用变量的值。
但productImageUrl
更有可能包含下载 URL,在这种情况下,您首先需要通过调用 refFromURL
方法将其映射回存储空间 Reference
:
var storageRef = FirebaseStorage.instance.refFromURL(productImageUrl);
await storageRef.delete();
【讨论】:
以上是关于我从 Firestore 中删除了我的文档,相应的图像仍保留在存储中的主要内容,如果未能解决你的问题,请参考以下文章
Flutter 如何在 Firestore 中组合多个文档中的值以与列表中的相应卖家一起显示