如何使用 Firebase 函数获取存储桶中的文件列表

Bry*_*mer 1 node.js firebase google-cloud-functions firebase-storage

我正在尝试编写一个简单的函数,该函数将使用 Firebase 云函数迭代 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);
    })
});
Run Code Online (Sandbox Code Playgroud)

我收到一个错误,指出 storage.ref() 不是函数。

如果我尝试:

storage.listAll()
Run Code Online (Sandbox Code Playgroud)

它还告诉我 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)
        })

    });
    
});
Run Code Online (Sandbox Code Playgroud)

Dha*_*raj 5

listAll使用的是 Firebase 存储客户端 SDK 中的函数,而不是管理 SDK 中的函数。

要获取 Admin SDK 中的所有文件,请尝试以下操作:

const allFiles = await admin.storage().bucket().getFiles({ prefix: "/user/images" })
Run Code Online (Sandbox Code Playgroud)

这里的前缀是您要列出的路径。

  • 如果你只指定 prefix = 'a/',你会得到:
  • /a/1.txt
  • /a/b/2.txt
  • 但是,如果您指定 prefix='a/' 和 delimiter='/',您将得到:
  • /a/1.txt

您只需使用即可.getFiles()获取整个存储桶。更多详细信息可以在文档中找到