我希望能够使用Node.js删除Firebase存储中的文件夹,因为这是一个Firebase函数。
例如:
例如:
storageRef.child(child1).child(child2).delete();
像这样的东西,但 Firebase 文档没有提供任何信息。
还有一个问题: 当初始化存储文档节点js需要我的管理员json,但实时数据库不需要,想知道为什么?
storageRef.child(child1).child(child2).delete();
像这样的东西,但 Firebase 文档没有提供任何信息。
还有一个问题: 当初始化存储文档节点js需要我的管理员json,但实时数据库不需要,想知道为什么?
你可以使用Node.js这样做:
const firebase = require('firebase-admin');
async function deleteImageFromFirebase(imageName) {
await firebase.storage().bucket().file("folderName/"+imageName).delete();
}
同样地,在客户端方面:
// Create a reference to the file to delete
var desertRef = storageRef.child('images/desert.jpg');
// Delete the file
desertRef.delete().then(function() {
// File deleted successfully
}).catch(function(error) {
// Uh-oh, an error occurred!
});
在Firebase网站上查看此信息: 如何删除Firebase存储中的文件
可能有些晚了,但至少在Web上(基本上你所需要的),有新的API可以删除整个文件夹。
我测试过删除一个包含2张图片的文件夹,它可以正常工作。然后我尝试删除一个名为文件夹-A的文件夹,它包含:文件夹-B和图片-A。文件夹-B中还有一张图片-B; 它仍然删除了文件夹-A及其所有内容。
解决方案:
const bucket = admin.storage().bucket();
return bucket.deleteFiles({
prefix: `posts/${postId}`
);
我在官方文档中找不到这个(可能是全新的API),但在一篇很棒的文章中找到了解决方案: 使用Cloud Functions for Firebase自动从Firestore中删除Firebase Storage文件
import { storage } from "./firebaseClient";
import { bucket } from "./firebaseServer";
//Let's assume this is the URL of the image we want to delete
const downloadUrl = "https://storage.googleapis.com/storage/v1/b/<projectID>.appspot.com/o/<location>?"
//firebase delete function
const deleteImages = async ({ downloadUrl }) => {
const httpsRef = storage.refFromURL(downloadUrl).fullPath;
return await bucket
.file(httpsRef)
.delete()
.then(() => "success")
.catch(() => "error")
}
//call the deleteImages inside async function
const deleteStatus = await deleteImages({ downloadUrl: oldImage });
console.log(deleteStatus) //=> "success"