我从 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 中删除了我的文档,相应的图像仍保留在存储中的主要内容,如果未能解决你的问题,请参考以下文章

为啥即使不是公开的,我也能读、写firestore?

使用nodejs从firestore文档中删除字段

Flutter 如何在 Firestore 中组合多个文档中的值以与列表中的相应卖家一起显示

在 Firestore 的集合中删除所有文档时返回所有文档

如何使用 Flutter 在 Firestore 中删除集合中的所有文档

Firebase Firestore 未在 google chrome 中获取数据