如何从 Firebase 云函数中删除 Firebase 存储文件夹?
How to delete a Firebase Storage folder from a Firebase Cloud Function?
我在 Firebase API 参考中找不到 deleteFiles()
方法。我的 IDE 告诉我这个方法有一个可选的 DeleteFilesOptions
参数,我也找不到关于该类型的任何信息。如果有人可以向我指出此文档,我将不胜感激。
就是说,我已经看到许多帖子使用此方法和此参数通过 Cloud Function 删除整个存储文件夹(及其所有文件)。我的问题是,这是正确的方法吗(因为缺少此处的文档)?
const functions = require("firebase-functions");
const admin = require("firebase-admin");
exports.deleteStorageFolder = functions.https.onCall(async (data, _context) => {
const uid = data.userId;
try {
const bucket = admin.storage().bucket(); // returns the default bucket, which is good
await bucket.deleteFiles({
prefix: `images/users/${uid}`, // the path of the folder
});
return Promise.resolve(true);
} catch (error) {
throw new functions.https.HttpsError("unknown", "Failed to delete storage folder.", error);
}
});
正如@Doug 在评论中提到的那样,“Firebase 只是提供了云存储的包装器。它们是同一回事。”。此外,根据此 documentation,“Cloud Storage for Firebase 将您的文件存储在 Google Cloud Storage 存储桶中,使它们可以通过 Firebase 和 Google Cloud 访问。这使您可以灵活地通过适用于云存储的 Firebase SDK 从移动客户端上传和下载文件。"
话虽如此,我已经尝试使用 deleteFiles()
复制您提供的代码片段,并且在我这边运行良好:
// // The Firebase Admin SDK to access Firestore.
const functions = require("firebase-functions");
const admin = require('firebase-admin');
const firebaseConfig = {
// Your Firebase configuration...
};
admin.initializeApp(firebaseConfig);
const bucket = admin.storage().bucket();
async function deleteFolder(){
await bucket.deleteFiles({
prefix: 'images/users/${uid}' // the path of the folder
});
}
deleteFolder();
您可以做的另一个选择是直接使用 Google Cloud Storage,并跳过使用 Firebase Storage:
const {Storage} = require('@google-cloud/storage');
const storage = new Storage();
const bucket = storage.bucket("your-bucket-name");
bucket.deleteFiles({
prefix: 'images/users/${uid}'
}, function(err) {
if (!err) {
console.log("All files in the `images` directory have been deleted.");
}
});
注意一下,按照Doug的建议,您可以先在本地或测试环境中尝试和测试它。更多参考,可以参考delete() and deleteFiles()
我在 Firebase API 参考中找不到 deleteFiles()
方法。我的 IDE 告诉我这个方法有一个可选的 DeleteFilesOptions
参数,我也找不到关于该类型的任何信息。如果有人可以向我指出此文档,我将不胜感激。
就是说,我已经看到许多帖子使用此方法和此参数通过 Cloud Function 删除整个存储文件夹(及其所有文件)。我的问题是,这是正确的方法吗(因为缺少此处的文档)?
const functions = require("firebase-functions");
const admin = require("firebase-admin");
exports.deleteStorageFolder = functions.https.onCall(async (data, _context) => {
const uid = data.userId;
try {
const bucket = admin.storage().bucket(); // returns the default bucket, which is good
await bucket.deleteFiles({
prefix: `images/users/${uid}`, // the path of the folder
});
return Promise.resolve(true);
} catch (error) {
throw new functions.https.HttpsError("unknown", "Failed to delete storage folder.", error);
}
});
正如@Doug 在评论中提到的那样,“Firebase 只是提供了云存储的包装器。它们是同一回事。”。此外,根据此 documentation,“Cloud Storage for Firebase 将您的文件存储在 Google Cloud Storage 存储桶中,使它们可以通过 Firebase 和 Google Cloud 访问。这使您可以灵活地通过适用于云存储的 Firebase SDK 从移动客户端上传和下载文件。"
话虽如此,我已经尝试使用 deleteFiles()
复制您提供的代码片段,并且在我这边运行良好:
// // The Firebase Admin SDK to access Firestore.
const functions = require("firebase-functions");
const admin = require('firebase-admin');
const firebaseConfig = {
// Your Firebase configuration...
};
admin.initializeApp(firebaseConfig);
const bucket = admin.storage().bucket();
async function deleteFolder(){
await bucket.deleteFiles({
prefix: 'images/users/${uid}' // the path of the folder
});
}
deleteFolder();
您可以做的另一个选择是直接使用 Google Cloud Storage,并跳过使用 Firebase Storage:
const {Storage} = require('@google-cloud/storage');
const storage = new Storage();
const bucket = storage.bucket("your-bucket-name");
bucket.deleteFiles({
prefix: 'images/users/${uid}'
}, function(err) {
if (!err) {
console.log("All files in the `images` directory have been deleted.");
}
});
注意一下,按照Doug的建议,您可以先在本地或测试环境中尝试和测试它。更多参考,可以参考delete() and deleteFiles()