获取Firebase存储中文件夹中使用的存储空间

时间:2016-08-04 08:51:58

标签: firebase firebase-storage

我正在创建可用于上传文件的Firebase应用。如何获取用户在其(users/{userId}/{allPaths=**})文件夹中使用的空间量?

2 个答案:

答案 0 :(得分:7)

好问题。简而言之,没有简单的方法可以做到这一点(即使对我们来说也是如此!),因为这实际上要求我们对一整套文件进行递归并将它们全部加起来。它是一个相当大的mapreduce,每次上传文件都不会有效。

然而,我们会在metadata.size属性中返回单个文件的大小,因此您可以在服务器上执行自己的list调用(查看gcloud`)给你一个文件列表和"文件夹"。获取文件的大小并将其添加,然后递归并对所有子文件夹执行相同操作。总结一下,然后写一些类似Firebase实时数据库的东西,在那里你可以轻松地从客户端获取文件夹大小。

答案 1 :(得分:0)

这是我写的一个小脚本,用于计算用于每个“文件夹”的文件和字节数,并输出到控制台。

function main(bucketName = 'YOUR_BUCKET_NAME') {
  /**
   * TODO(developer): Uncomment the following line before running the sample.
   */
  // const bucketName = 'Name of a bucket, e.g. my-bucket';

  // Imports the Google Cloud client library
  const {Storage} = require('@google-cloud/storage');

  // Creates a client
  const storage = new Storage();

  async function listFiles() {
    // Lists files in the bucket
    const [files] = await storage.bucket(bucketName).getFiles();

    console.log('Files:');
    let bucketList = {};
    files.forEach(file => {
      let folder = file.name.split('/')[0];
      if (!bucketList[folder]) {
        bucketList[folder] = {};
        bucketList[folder]['bytes'] = 0;
        bucketList[folder]['count'] = 0;
      }
      bucketList[folder]['bytes'] += Number(file.metadata.size);
      bucketList[folder]['count'] +=1;

    });
    console.log(bucketList);
  }

  listFiles().catch(console.error);
  // [END storage_list_files]
}
main(...process.argv.slice(2));