我在appengine上使用Drive Api,使用服务帐户进行身份验证。 在我的云端硬盘空间中,我有许多与我的个人用户一起创建并与服务帐户共享的文档。
+--_folderA
+-- fileA1
+-- fileA2
+-- fileA3
+--_folderB
+-- fileB1
+-- fileB2
如果我使用 corpus ='domain'调用file.list,我会正确获取与服务帐户共享的所有文件。
response = service.files().list(q="",
spaces='drive',
corpus='domain',
fields='nextPageToken,
files(id, name)',
pageToken=page_token).execute()
RESULT: folderA, folderB, fileA1, fileA2, fileA3, fileB1, fileB2
但如果我用 corpus ='user'调用file.list,我只获得与服务帐户共享的文件的一部分。
response = service.files().list(q="",
spaces='drive',
corpus='user',
fields='nextPageToken,
files(id, name)',
pageToken=page_token).execute()
RESULT: fileA2, fileB1
这种行为特别奇怪,因为我找不到某些文件被返回的标准,有些文件没有。实际上,与服务帐户共享的所有文件都具有相同的属性 此外,如果我在父文件夹(和corpus ='user')上添加带有子句的查询,我会看到更多文件,这对我来说很奇怪,因为我正在缩小搜索空间。
response = service.files().list(q="folderA_ID in parents",
spaces='drive',
corpus='user',
fields='nextPageToken,
files(id, name)',
pageToken=page_token).execute()
RESULT: fileA1, fileA2, fileA3
我使用Java和Python获得相同的结果。
答案 0 :(得分:0)
服务帐户拥有自己的Google云端硬盘帐户。因此,它拥有的文件与与之共享的文件之间存在差异。
Acceptable values are:
“域”:共享到用户域的文件 “user”:用户拥有或共享的文件。 (默认)
当您请求domain
时,您要求查看它有权访问的所有文件。那些是你的文件。当您说users
时,您要求提供服务帐户个人拥有的文件。检查文件permissions我的猜测是你会了解一些文件返回的原因而其他文件没有。
有关domain
的更多信息答案 1 :(得分:0)
Google有explained发生这种情况的原因:
在发出corpora参数设置为“ user”的Files.List请求时,行为是返回MyDrive中的所有文件以及与您共享的文件,即使它们是共享驱动器中的文件。 但是,当发出请求的用户对共享驱动器(管理器,查看器,贡献者等)具有权限时,这是一个例外,在这种情况下,Files.List请求将不会在共享驱动器中检索文件(尽管拥有其中所有文件的权限),除非用户与该文件有任何交互(已创建,打开/共享给其他人,即文件)。
有关上述行为的例外情况未在官方文档中说明。我为此打开了一个内部问题,以便可以更新文档。
对于您期望的行为,可以将corpora参数设置为“ allDrives”,它将从MyDrive中检索所有文件,与您共享的文件以及您有权访问的共享驱动器中的所有文件。 / p>
我认为这很令人困惑,但是我认为从API角度来看,其目的是允许API向用户返回与相关的文件,而不是与用户< em>可以访问。当用户是共享驱动器上的Manager,Viewer,Contributer等时,后者的列表可能会很大,并且用户可能对大部分内容不感兴趣。