我正在尝试编写一个简单的函数,该函数将使用Firebase Cloud函数迭代Firebase存储中文件夹中的所有文件。我花了几个小时在网上尝试每一个例子,并阅读了文档。
这就是我目前拥有的:
exports.removeUnsizedImages = functions.pubsub.schedule('every 2 minutes').onRun((context) => {
const storage = admin.storage();
var storageRef = storage.ref();
storageRef.listAll().then(function(result) {
console.log("*", result);
})
});
我得到一个错误,storage.ref((不是一个函数。
如果我尝试:
storage.listAll()
它还告诉我listAll不是一个函数。
我真的没想到把文件放在文件夹里会这么难。
我做错了什么?
更新的代码现在有效
exports.removeUnsizedImages = functions.pubsub.schedule('every 24 hours').onRun((context) => {
admin.storage().bucket().getFiles({ prefix: "postImages/" }).then(function(data) {
const files = data[0];
files.forEach(function(image) {
console.log("***** ", image.name)
})
});
});
您正在使用的listAll
是Firebase Storage Client SDK中的一个函数,而不是Admin SDK。
要获取Admin SDK中的所有文件,请尝试以下操作:
const allFiles = await admin.storage().bucket().getFiles({ prefix: "/user/images" })
这里的前缀是您想要列出的路径。
- 如果您只指定前缀="a/",您将返回:
- /a/1.text
- /a/b/2.txt
- 但是,如果指定前缀="a/"和分隔符="/",则返回:
- /a/1.text
您只需使用.getFiles()
即可获得整个bucket。更多详细信息可在文件中找到