使用 Cloud Functions 删除 Firebase 存储中的文件夹
Delete Folder inside Firebase Storage with Cloud Functions
我想创建一个 Cloud Function,当在 Firestore 中删除对象(列表)时,它会自动删除 FirebaseStorage 中关联的图像。
作为上下文,当创建列表时,我们采用该文档 ID 并将其设置为 FirebaseStorage 中的子文件夹的名称。
像这样:
所以基本上我在文件夹 Call ListingImages 和 Inside per Listing(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 中删除列表)时它给我这个错误:
虽然有文件夹,但看起来好像没有对象。
关于如何完成这项任务有什么想法吗?
您可以尝试使用@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}`
})
});
文件夹在云存储上不是真实的东西。实际上它只是一长串文件,在文件的 name/path 中有一个 /
被解释为一个文件夹(也称为 前缀 , 因为它是 name/path).
的开始
这实际上意味着要删除文件夹,您需要删除该文件夹中的所有文件。执行此操作后,该文件夹将自动消失。
我想创建一个 Cloud Function,当在 Firestore 中删除对象(列表)时,它会自动删除 FirebaseStorage 中关联的图像。
作为上下文,当创建列表时,我们采用该文档 ID 并将其设置为 FirebaseStorage 中的子文件夹的名称。
像这样:
所以基本上我在文件夹 Call ListingImages 和 Inside per Listing(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 中删除列表)时它给我这个错误:
虽然有文件夹,但看起来好像没有对象。
关于如何完成这项任务有什么想法吗?
您可以尝试使用@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}`
})
});
文件夹在云存储上不是真实的东西。实际上它只是一长串文件,在文件的 name/path 中有一个 /
被解释为一个文件夹(也称为 前缀 , 因为它是 name/path).
这实际上意味着要删除文件夹,您需要删除该文件夹中的所有文件。执行此操作后,该文件夹将自动消失。