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 中删除列表)时,它给了我这个错误:
虽然有一个文件夹,但看起来好像没有对象。
关于如何完成这项任务有什么想法吗?
您可以尝试使用@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)
归档时间: |
|
查看次数: |
825 次 |
最近记录: |