【问题标题】:Listing Drive folders through Apps Scripts doesn't show permissions通过 Apps 脚本列出云端硬盘文件夹不显示权限
【发布时间】:2018-12-06 18:28:34
【问题描述】:

目标: 列出组织云端硬盘中的所有文件夹以及有权访问每个文件夹的所有人。

我是通过启用了高级 Drive 服务的 Apps 脚本来实现的。

function listFolders() {
    var query = 'mimeType = "application/vnd.google-apps.folder" and trashed = false'
    var response = Drive.Files.list({corpora: 'domain', q : query});
    if (response.items && response.items.length > 0) {
        var foldersDetails = getFoldersDetails(response.items);
    }
    Logger.log(foldersDetails);
}

function getFoldersDetails(items) {
    var foldersArr = [];
    for (var i = 0; i < items.length; i++) {
        var folderDetails = getFolderDetails(items[i].id);
        foldersArr.push(folderDetails);
    }
    return foldersArr;
}

function getFolderDetails(fileId) {
    var file = Drive.Files.get(fileId);
    return {name: file.title,
            permissions: file.permissions}
}

问题是我得到的是空值而不是权限对象。

Drive API 文档:https://developers.google.com/drive/api/v2/reference/files

我做错了什么?

【问题讨论】:

    标签: javascript google-apps-script google-api google-drive-api


    【解决方案1】:

    这是由于partial response 然而。

    文件列表只会返回 ID 和名称,如果我记得的话,我相信文档是旧的且无效的。另一方面 File.get 您可以添加添加 fields 参数并使用 * 然后它将返回您现在看到的所有参数返回为 null

    我不是 JavaScript 或应用脚本开发人员。代码应该是这样的,仅适用于文件获取。我似乎找不到一个例子,它只有一个使用 files.list 的例子,它不适用于 V3。

    function listFiles() {
      var files = Drive.Files.list({
        fields: 'nextPageToken, items(id, title)',
        maxResults: 10
      }).items;
      for (var i = 0; i < files.length; i++) {
        var file = files[i];
        Logger.log('%s (%s)', file.title, file.id);
      }
    }
    

    如果你想查看所有内容,请使用 *

    var files = Drive.Files.list({
        fields: '*',
        maxResults: 10
      }).items;
    

    链接到How to get full file response

    【讨论】:

    • 非常感谢,它成功了。我正在为将来的参考添加答案。
    • 将来当您有足够的声誉时,您可以编辑我的答案并添加正确的代码。这样,帮助您的人获得积分并且代码是正确的。但我很高兴你能正常工作:)
    【解决方案2】:

    正如 DaImTo 建议的那样,添加 field='*' 在我的代码中起到了作用:

    function getFolderDetails(fileId) {
        var file = Drive.Files.get(fileId, {fields:'*'});
        return {name: file.title,
                permissions: file.permissions}
    }
    

    【讨论】:

      猜你喜欢
      • 2020-02-21
      • 1970-01-01
      • 1970-01-01
      • 2017-08-10
      • 2017-07-13
      • 2022-10-07
      • 2018-04-22
      • 2020-02-02
      • 1970-01-01
      相关资源
      最近更新 更多