【问题标题】:Google cloud storage directory size谷歌云存储目录大小
【发布时间】:2018-05-14 17:28:06
【问题描述】:

我正在尝试找出如何计算 google-cloud-storage 存储桶中目录的大小。

到目前为止,我已经找到了两种方法:

  • 使用gsutils(我不能,因为它在我需要执行此操作的机器上不可用)
  • 使用nodejs 库中的getMetadata 方法。

问题在于getMetatada 方法仅适用于文件,而不适用于目录(或称为前缀)。

我可以列出所有文件并询问它们的大小,但getMetadata 不允许查询批处理,我可能会让人们对@google 生气。

你们知道有什么方法可以以尊重的方式正确地做到这一点吗?

真诚的

【问题讨论】:

    标签: node.js google-cloud-storage


    【解决方案1】:

    如果你可以使用gsutil,你可以使用du,像这样:

    gsutil du -sh YOUR_BUCKET/YOUR_DIRECTORY

    -s 标志只会给你目录的大小,如果你删除它,你也会看到里面文件的大小。 -h 标志以人类可读的格式(KiB、MiB 等)返回大小。如果不存在,它将以字节为单位显示大小。

    但是,既然你提到你不能那样做,你将不得不使用,如上所述,getMetadata。

    这个简单的脚本将在控制台中显示您希望文件夹中所有文件的大小(以字节为单位)。您可以稍后对其进行修改以将这些尺寸相加。

    var http = require("http");
    http.createServer(function (request, response) {
       const Storage = require('@google-cloud/storage');
       const projectId = "PROJECT-ID";
       const bucketName = "BUCKET-NAME";
       const storage = Storage({
           projectId: projectId,
       });
      const options = {
        prefix: "FOLDER-IN-BUCKET/"
      }
      storage
        .bucket(bucketName)
        .getFiles(options)
        .then(results => {
            const files = results[0];
            files.forEach(file => {
              storage.
                bucket(bucketName)
                .file(file.name)
                .getMetadata()
                .then(metadata_results => {
                    const metadata = metadata_results[0];
                    console.log(metadata.size);
                    console.log(metadata.name);
              }).catch(metadata_err => {
                console.error(metadata_err);
              });
            });
         }).catch(err => {
            console.error(err);
        });
       response.writeHead(200, {'Content-Type': 'text/plain'});
       response.end('Hello World\n');
    }).listen(8080);
    console.log("Hello World");
    

    不要忘记在 package.json 中添加 Cloud Storage 的依赖项。

    你可以关注this suggestion,使用日常存储日志,从Node读取上述日志

    【讨论】:

    • 谢谢@Mangu,这确实是我考虑过的,但这些目录可能会变得非常大,我不想通过调用目录中的每个文件来开始惹恼谷歌的人。
    • 真诚地,我只担心电话的costs,仅此而已。
    • 是的,还有运行时间。而且,我不控制人们上传的文件数量,所以我不控制成本。
    • 您可以关注this suggestion,使用日常存储日志,并从 Node.js 读取上述日志。除此之外,我没有看到其他可能的选择。
    • 感谢满谷的帮助 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 2015-07-17
    • 2016-04-30
    • 2018-11-25
    • 2020-09-10
    • 2018-07-08
    • 2016-10-12
    相关资源
    最近更新 更多