在firebase函数中使用gsutil

时间:2018-03-12 17:02:52

标签: firebase google-cloud-functions

是否可以在firebase函数触发器中使用gsutil?每次用户在存储桶中添加或删除文件时,我都希望更新包含多个文件夹大小的变量,因此在存储触发器中使用gsutil du -s gs://[BUCKET_NAME]/[FOLDER_NAME]

还有一个其他解决方案可以获得比gsutil更多的文件夹大小...

1 个答案:

答案 0 :(得分:2)

您可以使用@google-cloud/storage NPM module,特别是Bucket.getFiles()来遍历文件列表并添加其大小。 (我相信这是gsutil du在幕后所做的事情。请注意,如果您返回的文件超过1,000个,则需要处理分页结果。

通过HTTP运行以下功能,您应该得到如下输出:

3 files: 9.55MB / 10008960

<强> index.js

&#13;
&#13;
const functions = require('firebase-functions');
exports.bucketSizer = functions.https.onRequest((req, res) => {
  const storage = require('@google-cloud/storage')();
  const bytes = require('bytes');
  const bucketName = 'MY_BUCKET_NAME';
  const dir = 'MY_DIRECTORY_NAME/';
  const options = {
    prefix: dir,
  };
  storage
    .bucket(bucketName)
    .getFiles(options)
    .then(results => {
      const files = results[0];
      let totalSize = 0;
      console.log('Files:');
      files.forEach(file => {
        console.log(file.name);
        let fileSize = parseInt(file.metadata.size);
        console.log(fileSize);
        totalSize += fileSize;
      });
      console.log("Total file size--> ", totalSize);
      res.send(`${files.length} files: ${bytes(totalSize)} / ${totalSize}`);
      return true;
    })
    .catch(err => {
      console.error('ERROR:', err);
      res.status(500).send(err);
    });
});
&#13;
&#13;
&#13;

<强>的package.json

$ npm install --save @google-cloud/storage
$ npm install --save bytes