尝试通过获取文件的权限,循环访问文件以及检索具有“所有者”角色的权限的用户信息(特别是电子邮件地址)来查找文件的所有者。
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”作为权限对象的属性之一,所以我很困惑为什么我无法检索它。
我认为它可能与用于获取云端硬盘服务的用户凭据有关,但即使使用文件所有者的凭据仍然会产生相同的结果。
答案 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)域中,那么您将无权访问其电子邮件地址。您的选择是:
答案 2 :(得分:0)
Drive API Permission resource有四种类型。
user
group
domain
anyone
emailAddress
字段仅在类型为user
或group
且domain
字段仅出现在domain
类型时才会显示。
另外,请确保使用字段查询参数明确要求emailAddress
字段。