Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 驱动器api:file.list在语料库=';用户';_Google App Engine_Google Drive Api - Fatal编程技术网

Google app engine 驱动器api:file.list在语料库=';用户';

Google app engine 驱动器api:file.list在语料库=';用户';,google-app-engine,google-drive-api,Google App Engine,Google Drive Api,我在appengine上使用驱动Api,使用服务帐户进行身份验证。 在我的驱动器空间中,我有许多与我的个人用户创建的文档,并与服务帐户共享 +--_folderA +-- fileA1 +-- fileA2 +-- fileA3 +--_folderB +-- fileB1 +-- fileB2 如果我使用corpus='domain'调用file.list,我将正确获得与服务帐户共享的所有文件 response = service.files(

我在appengine上使用驱动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
response = service.files().list(q="",
    spaces='drive',
    corpus='user',
    fields='nextPageToken,
    files(id, name)',
    pageToken=page_token).execute()
RESULT: fileA2, fileB1
但是,如果我使用corpus='user'调用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
response = service.files().list(q="",
    spaces='drive',
    corpus='user',
    fields='nextPageToken,
    files(id, name)',
    pageToken=page_token).execute()
RESULT: fileA2, fileB1
这种行为特别奇怪,因为我找不到任何条件,其中一些文件返回,而另一些文件不返回。事实上,与服务帐户共享的所有文件都具有相同的属性。
此外,如果我在parents文件夹(和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获得了相同的结果。

服务帐户有自己的Google Drive帐户。因此,它拥有的文件和与它共享的文件之间存在差异


“域”:共享到用户域的文件。
“用户”:由用户拥有或共享给用户的文件。(默认)

当您请求
domain
时,您要求查看它可以访问的所有文件。那些是你的档案。当您说
users
时,您要求的是服务帐户个人拥有的文件。检查一下文件,我想你会了解为什么有些文件返回,而有些文件没有返回


有关

的更多信息服务帐户有自己的Google Drive帐户。因此,它拥有的文件和与它共享的文件之间存在差异


“域”:共享到用户域的文件。
“用户”:由用户拥有或共享给用户的文件。(默认)

当您请求
domain
时,您要求查看它可以访问的所有文件。那些是你的档案。当您说
users
时,您要求的是服务帐户个人拥有的文件。检查一下文件,我想你会了解为什么有些文件返回,而有些文件没有返回

有关谷歌的更多信息,请参见发生这种情况的原因:

在corpora参数设置为“user”的情况下,执行Files.List请求时的行为是返回MyDrive中的所有文件以及与您共享的文件,即使它们是共享驱动器中的文件但当请求用户对共享驱动器(管理器、查看器、参与者等)具有权限时,会出现例外情况。在这种情况下,“文件列表”请求不会检索共享驱动器中的文件(尽管对其中的所有文件都有权限),除非用户与该文件进行了任何交互(已创建/打开/共享该文件)。

官方文档中没有说明上述行为的例外情况。我打开了一个内部问题,以便更新文档

对于您期望的行为,您可以将corpora参数设置为“AllDrive”,它将从MyDrive中检索所有文件、与您共享的文件以及您有权访问的共享驱动器中的所有文件

在我看来,这是令人困惑的,但我认为从API的角度来看,这样做的目的是允许API返回与用户相关的文件,而不是用户可以访问的所有文件。当用户是共享驱动器上的经理、查看者、贡献者等时,后一个列表可能相当大,并且用户可能不在共享驱动器中对大部分内容感兴趣。

谷歌有这样的原因:

在corpora参数设置为“user”的情况下,执行文件.List请求时的行为是返回MyDrive中的所有文件以及与您共享的文件,即使它们是共享驱动器中的文件。但当请求用户对共享驱动器具有权限时,则有一个例外(管理员、查看者、参与者等),在这种情况下,文件.List请求不会检索共享驱动器中的文件(尽管对其中的所有文件都有权限),除非用户与该文件进行了任何交互(创建/打开/共享给其他人,即该文件)。

官方文档中没有说明上述行为的例外情况。我打开了一个内部问题,以便更新文档

对于您期望的行为,您可以将corpora参数设置为“AllDrive”,它将从MyDrive中检索所有文件、与您共享的文件以及您有权访问的共享驱动器中的所有文件


在我看来,这是令人困惑的,但我认为从API的角度来看,这样做的目的是允许API返回与用户相关的文件,而不是用户可以访问的所有文件。当用户是共享驱动器上的经理、查看者、贡献者等时,后一个列表可能相当大,并且用户可能不在共享驱动器中对大部分内容感兴趣。

请显示相关代码,特别是包含针对Google Drive运行的各种查询的代码。如果您打算查看自己的文件,请不要使用服务帐户。只需直接向您自己的帐户进行身份验证。这样生活就会简单得多。我在中添加了代码原始帖子。我需要使用服务帐户,因为我正在处理一个守护程序。它是否是守护程序并不重要。有关如何验证后台应用程序的步骤,请参阅。服务帐户不适用于您的用例。请显示相关代码,特别是包含针对Google Driv运行的各种查询的代码e、 如果您打算查看自己的文件,请不要使用服务帐户。只需直接向您自己的帐户进行身份验证即可