无法使用Google Drive API获取文件所有者

时间:2016-10-27 20:53:33

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

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

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”作为权限对象的属性之一,所以我很困惑为什么我无法检索它。

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

3 个答案:

答案 0 :(得分:1)

Google Drive REST API v3仅返回某些默认字段。如果您需要某个字段,则必须通过使用PermissionList filePermissions = service.permissions().list(fileID).setFields('permissions(emailAddress,id,kind,role,type)').execute();方法设置它来明确请求。

像这样修改你的代码 -

{{1}}

您可以在https://developers.google.com/drive/v3/web/migration

了解有关此行为的更多信息

从上述链接引用 -

  

值得注意的变化

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

如果它适合您,请接受答案,以便面临此问题的其他人也可能受益。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

Drive API Permission resource有四种类型。

  • user
  • group
  • domain
  • anyone

emailAddress字段仅在类型为usergroupdomain字段仅出现在domain类型时才会显示。

另外,请确保使用字段查询参数明确要求emailAddress字段。