使用 Cloud Functions 删除 Firebase Storage 中的文件夹

Ren*_*las 1 node.js google-cloud-storage firebase google-cloud-functions google-cloud-firestore

我想创建一个云函数,当在 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;
});
Run Code Online (Sandbox Code Playgroud)

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

函数运行时出错

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

关于如何完成这项任务有什么想法吗?

Dha*_*raj 5

您可以尝试使用@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}`
  })
});
Run Code Online (Sandbox Code Playgroud)