【问题标题】:DriveApp.getStorageUsed() and summing the file sizes returned by DriveApp.getFiles() do not match.DriveApp.getStorageUsed() 和 DriveApp.getFiles() 返回的文件大小的总和不匹配。
【发布时间】:2017-06-01 20:02:07
【问题描述】:

===================问题

当我使用以下代码时:

Logger.log(DriveApp.getStorageUsed())

我得到值:6.888066988E9

该数字与 GDrive 上显示的数字相匹配。当我使用此代码时出现问题:

var files = DriveApp.getFiles()
var fileSizeTotal = 0;

while (files.hasNext()) {
  fileSizeTotal += files.next().getSize()
}

我得到值:3.539154182E9

按照我的逻辑,数字应该相同,但显然不是......

===================问题

造成差异的原因是什么,如何使迭代中文件大小的总和与 DriveApp.getStorageUsed() 调用的总和相匹配?

【问题讨论】:

    标签: javascript google-app-engine google-apps-script google-cloud-platform


    【解决方案1】:

    当我看到你的问题时,起初我以为这个区别与垃圾箱有关。所以我做了一个示例脚本来验证这一点。

    作为示例文件,我将 2 个大小为 100 KB 的文本文件放在已清理的 Google Drive 上。我将一个文件放入了垃圾箱。正如您所知,因为 Google Docs 没有文件大小。

    示例脚本:

    要使用此示例,请在 Advanced Google Services 和 Google API 控制台启用 Drive API。请执行run()

    function run(){
      var res;
      res = getTotalFilesize(true)
      Logger.log(res)
      res = getTotalFilesize(false)
      Logger.log(res)
    }
    
    function getTotalFilesize(trash) {
      var token = "dummy";
      var filesize = 0;
      var numberOfFilesWithSize = 0;
      var numberOfFiles = 0;
      while (token) {
        var res = Drive.Files.list({
          q: trash ? "" : "trashed=false",
          maxResults: 1000,
          fields: "items(id, fileSize), nextPageToken",
          pageToken: token && token != "dummy" ? token : ""
        });
        token = res.nextPageToken;
        numberOfFiles += res.items.length;
        res.items.forEach (function(e) {
          if (e.fileSize) {
            numberOfFilesWithSize++;
            filesize += parseInt(e.fileSize, 10);
          }
        });
      }
      return {
        IncludeTrash: trash ? "yes" : "no",
        TotalFilesize: filesize,
        NumberOfFilesWithSize: numberOfFilesWithSize,
        TotalFiles: numberOfFiles
      };
    }
    

    结果:

    {NumberOfFilesWithSize=2.0, TotalFiles=2.0, TotalFilesize=200000.0, IncludeTrash=yes}
    {NumberOfFilesWithSize=1.0, TotalFiles=1.0, TotalFilesize=100000.0, IncludeTrash=no}
    

    getStorageUsed()getSize() 的结果分别为 200000.0 和 100000.0。共享文件包含在垃圾箱之外。所以当共享一个大小为 100 kBytes 的文件时,以上两个结果都加了 100 kBytes。

    讨论:

    从这些结果来看,我认为getStorageUsed()getSize()的区别在于文件是否包含在垃圾箱中。

    但我认为可能还有其他因素。如果你使用这个样本,我可以问你关于你的结果吗?如果您的结果与我的估计不一样,我们可以知道其他因素的存在。

    如果这些信息对您有帮助,我很高兴。

    补充:

    您还可以使用Drive.About.get() 检索存储信息。谢谢@Sagar Kanabar。

    var obj = Drive.About.get();
    var out = {
      usageInDrive: obj.quotaBytesUsed,
      usageInTrash: obj.quotaBytesUsedInTrash
    };
    Logger.log(out)
    
    >>> {usageInTrash=100000, usageInDrive=200000}
    

    由此可知Drive中有100kb,Trash中有100kb。

    【讨论】:

    猜你喜欢
    • 2017-10-25
    • 1970-01-01
    • 2013-01-14
    • 2020-12-23
    • 2015-02-22
    • 1970-01-01
    • 2018-06-07
    • 2015-05-15
    • 1970-01-01
    相关资源
    最近更新 更多