如何使用Google云端硬盘API和服务帐户获取加星标的文件?

我正在本地开发一个应用程序,最终将在Go的Google App Engine上运行。

我正在按照云文档中的建议使用服务帐户密钥:

https://cloud.google.com/docs/authentication

代表 Google Cloud 环境之外的服务帐号访问私有数据

建议:服务帐户密钥

这是预期的工作流程:

  1. 管理员会创建一个云端硬盘文件夹,该文件夹将与选定的用户和服务帐号共享。

  2. 用户可以在该共享文件夹中创建文件。

  3. 管理员可以对这些文件的选定内容加注星标并调用应用。

  4. 该应用程序查询该共享文件夹中的已加星标的文件并处理这些文件。

现在,如果管理员使用“文件:”列表“试用此 API”,请位于:

https://developers.google.com/drive/api/v3/reference/files/list

使用此查询字符串:

parents in 're89w...r9d9' and starred

然后显示已加星标的文件。

但是,当我的应用使用相同的字符串时:

q := "parents in '" + folderID + "' and starred "
fl, err = srvDrive.Files.List().PageSize(100).Q(q).Fields("nextPageToken, files(name)").Do()

那么 fl 是一个空列表;没有加星标的文件。

我怀疑它与使用服务帐户有关,并且可能有一种方法可以通过以某种方式冒充某些内容来解决此问题,但是文档变得深入,我不确定如果我弄清楚它甚至会有所帮助。

我的应用如何查询管理员云端硬盘中已加星标的文件?


互换的青春
浏览 215回答 2
2回答

阿波罗的战车

从你的问题中,我了解到你目前的情况如下。您想要从特定文件夹中检索具有星号的文件的文件列表。该文件夹在您的帐户和服务帐户之间共享,您可以在 Google 云端硬盘中看到已加星标的文件。你想用googlapis for golang来实现这一点。我也有同样的情况。我认为这是一个错误或服务帐户的当前规范。因为例如,当 用于 时,即使文件夹中存在带有星号的文件,字段 也始终为所有文件。我认为这就是问题的原因。files(name,starred)fieldsstarredfalse所以在现阶段,我觉得很遗憾,使用服务账号无法直接检索星标文件列表。如果要检索已加星标的文件列表,以下解决方法如何?解决方法 1:在此变通办法中,可以使用从 OAuth2(而不是服务帐户)检索的访问令牌检索特定文件夹中的文件列表。在这种情况下,可以检索已加星标的文件列表。解决方法 2:在此解决方法中,使用 Google Apps 脚本创建的 Web 应用程序检索文件列表,当 golang 脚本请求 Web 应用程序时,将返回文件列表。在这种情况下,可以使用从服务帐户检索到的访问令牌。此外,可以在不使用访问令牌的情况下使用此功能。在此变通办法中,Web 应用用作 API。这样,尽管在变通办法 1 中,需要在 golang 脚本中使用 OAuth2 进程,但此变通办法可以避免这种情况,并且可以使用服务帐户。注意:例如,如何将其报告给Google问题跟踪器作为将来的请求?裁判顺便说一句,在您的脚本中,用作搜索查询。当我看到官方文件时,似乎.但是,当我测试时,我确认这是可以使用的。我认为这个规范可能会改变。q := "parents in '" + folderID + "' and starred "'1234567' in parentsparents in '1234567'而且,我认为在这种情况下,包括进来可能是合适的。trashed = falsefields

千万里不及你

问题:文件本身不加星标。文件是针对特定用户加星标的,如下所示:已加星标:用户是否已为文件加星标。这意味着某个帐户(#1)可以已为某个文件加星标,而另一个帐户(#2)则未加星标。因此,当使用 #1 查询文件时,将返回该文件,而使用 #2 执行此操作时,则不会返回该文件。我认为这就是这里发生的事情:您的常规(管理员)帐户已为某些文件加星标,而您的服务帐户(这是一个完全不同的帐户)尚未。starred因此,我不认为这是Google方面的问题:服务帐户可用于返回他们已加星标的文件。我通过(1)使用服务帐户为文件加星标和(2)通过q=“starred”查询加星标的文件来检查情况。已返回加星标的文件。溶液:如果要使用服务帐户检索由常规用户加星标的文件,则应授予服务帐户域范围的权限,并使用它来模拟用户。如果您想避免域范围的委派,Tanaike提供的解决方法#2也可能是一个不错的选择。更新:您正在使用 Go,遗憾的是,相应的 API 库尚未包含使用服务帐户模拟域用户的功能。以下是来自库存储库的相关功能请求:支持模拟 gSuite API 的管理员用户(请注意,已实现的其他 FR 指的是不同的功能)。同时,我可以尝试在不使用库的情况下完成模拟过程。有关总体指南,请参阅准备进行授权的 API 调用:HTTP/REST。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go