【问题标题】:Delete Folder inside Firebase Storage with Cloud Functions使用 Cloud Functions 删除 Firebase 存储中的文件夹
【发布时间】:2021-11-04 13:29:48
【问题描述】:

我想创建一个云函数,当在 Firestore 中删除对象(列表)时,它会自动删除 FirebaseStorage 中关联的图像。

作为上下文,在创建列表时,我们获取该文档 ID 并将其设置为 FirebaseStorage 中子文件夹的名称。

像这样:

所以基本上我在文件夹调用 ListingImages 和每个列表(Firestore 中的文档)内有主存储桶,有一个文件夹。

所以我的最终目标是,当我在 Firestore 中删除具有该 ID 的文档时,它会删除 Firebase 存储中的文件夹及其所有内容。

目前,我有这个云函数代码,但它不起作用:

// Function que elimina imagenes de un Listing cuando es borrado de Firebase.
exports.listingImagesDelete = functions.firestore.document("listings/{listingId}").onDelete((snapshot, context) => {
  const listingId = snapshot.id;

  const filePath = "ListingImages/" + listingId + "/";
  const defaultBucket = admin.storage().bucket();
  const file = defaultBucket.file(filePath);
  const pr = file.delete();

  return pr;
});

但是当我运行它(从 Firestore 中删除列表)时,它给了我这个错误:

看起来好像没有对象,虽然有一个文件夹。

关于如何完成这项任务的任何想法?

【问题讨论】:

    标签: node.js firebase google-cloud-firestore google-cloud-functions google-cloud-storage


    【解决方案1】:

    您可以尝试使用@google-cloud/storage 模块并设置路径前缀:

    const { Storage } = require("@google-cloud/storage")
    
    exports.listingImagesDelete = functions.firestore.document("listings/{listingId}").onDelete((snapshot, context) => {
      const listingId = snapshot.id;
      
      const storage = new Storage();
    
      const bucket = storage.bucket('name'); // [PROJECT_ID].appspot.com is default bucket
        
      return bucket.deleteFiles({
        prefix: `ListingImages/${listingId}`
      })
    });
    

    【讨论】:

    • 该死,你在代码示例方面打败了我——而我先完成了描述。 :)
    • @FrankvanPuffelen 很快 :D 我的模拟器正在启动并即将发布完整的功能?
    • 啊,这种事情我通常从文档或示例中复制代码,因为它很常见(一旦你知道你需要删除前缀)。
    • 嘿@Dharmaraj 和弗兰克只是一个问题: const bucket = storage.bucket('name');那里的名称是我隐藏的 Firebase 存储提供的任何名称或域,或其他任何名称。亲切的问候。
    • 谢谢@Dharmaraj,它终于工作了,非常感谢。
    【解决方案2】:

    文件夹在 Cloud Storage 上不是真实存在的。实际上,它只是一个长长的文件列表,在文件的名称/路径中包含 / 被解释为文件夹(也称为 前缀,因为它是名称/路径)。

    这实际上意味着要删除文件夹,您需要删除该文件夹中的所有文件。完成此操作后,该文件夹将自动消失。

    【讨论】:

      猜你喜欢
      • 2018-10-01
      • 2017-09-26
      • 2019-05-03
      • 2020-01-25
      • 2020-01-12
      • 2019-03-23
      • 1970-01-01
      • 2018-01-14
      • 2017-12-12
      相关资源
      最近更新 更多