Получить пространство для хранения, используемое в папке в Firebase Storage

Я создаю приложение Firebase, которое вы можете использовать для загрузки файлов. Как я могу получить объем пространства, используемого пользователем в его папке (users/{userId}/{allPaths=**})?


person Zvi Karp    schedule 04.08.2016    source источник


Ответы (2)


Отличный вопрос. Короче говоря, нет простого способа сделать это (даже для нас!), поскольку это фактически требует, чтобы мы рекурсивно прошлись по всему набору файлов и просуммировали их все. Это довольно большой mapreduce, который неэффективно запускать каждый раз при загрузке файла.

Однако мы возвращаем размер отдельного файла в свойстве metadata.size, поэтому вы можете выполнить свой собственный list вызов на сервере (см. gcloud`), который предоставит вам список файлов и "папок". Возьмите размеры файлов и сложите их, затем повторите и сделайте то же самое для всех подпапок. Суммируйте их и напишите что-то вроде базы данных Firebase Realtime, где вы можете легко получить размеры папок от клиентов.

person Mike McDonald    schedule 05.08.2016
comment
Если вы знаете общее использование хранилища, это означает, что у вас уже есть процедура, которая суммирует эти значения. Суть в том, чтобы разделить их по разным критериям. - person Guilherme Ferreira; 16.07.2020

Вот небольшой скрипт, который я написал, который подсчитывает количество файлов и байтов, используемых для каждой из ваших «папок», и выводит на консоль.

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));
person Mike O    schedule 21.02.2020