【问题标题】:Can't get File Owner using Google Drive API无法使用 Google Drive API 获取文件所有者
【发布时间】:2016-10-27 20:53:32
【问题描述】:

尝试通过获取文件的权限、循环访问文件并检索具有“所有者”角色的权限的用户信息(特别是电子邮件地址)来查找文件的所有者。

PermissionList filePermissions = service.permissions().list(fileID).execute();

for (Permission permission : filePermissions) {

    if (permission.getRole().toLowerCase().equals("owner")) {
        String fileOwner = permission.getEmailAddress();
    }

}

"permission.getEmailAddress()" 一直返回 null,所以我决定在每个权限上调用 "toPrettyString()",这表明权限对象只始终包含 "id"、" kind”、“role”和“type”,但绝不是“emailAddress”。

Google documentation for the Drive API 将“emailAddress”列为权限对象的属性之一,所以我很困惑为什么无法检索它。

我认为这可能与用于获取云端硬盘服务的用户凭据有关,但即使使用文件所有者的凭据仍然会产生相同的结果。

【问题讨论】:

    标签: java permissions google-drive-api file-ownership


    【解决方案1】:

    Google Drive REST APIs v3 只会返回某些默认字段。如果你需要一些字段,你必须通过.setFields() 方法来明确地请求它。

    像这样修改你的代码 -

    PermissionList filePermissions = service.permissions().list(fileID).setFields('permissions(emailAddress,id,kind,role,type)').execute();

    你可以在这里https://developers.google.com/drive/v3/web/migration阅读更多关于这种行为的信息

    引用以上链接-

    显着变化

    • 默认情况下不再返回完整资源。使用 fields 查询参数请求返回特定的字段。如果未指定,则仅返回常用字段的子集。

    如果它对您有用,请接受答案,以便其他面临此问题的人也可以从中受益。

    【讨论】:

      【解决方案2】:

      如果您用于运行程序的用户帐户与文件所有者位于不同的 GSuite (Google Apps) 域中,那么您将无权访问他们的电子邮件地址。您的选择是:

      1. 使用 displayName 代替电子邮件地址。
      2. 使用同一 GSuite 域中的 Google 帐户运行您的程序
      3. 使用委派的权限运行您的程序,以便能够模拟 GSuite 域的用户(请参阅标题为“将域范围的权限委派给服务帐户”的部分here

      【讨论】:

        【解决方案3】:

        Drive API Permission resource 有四种类型。

        • user
        • group
        • domain
        • anyone

        emailAddress 字段仅在类型为 user 或 group 时出现,domain 字段仅在类型 domain 上出现。

        同时确保您使用 fields 查询参数明确要求 emailAddress 字段。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多