【问题标题】:Quota, orphaned files and uploads using service account with Google Drive API使用带有 Google Drive API 的服务帐户进行配额、孤立文件和上传
【发布时间】:2014-08-24 23:13:29
【问题描述】:

上下文

我正在构建一个 php 网络应用程序,该应用程序需要将文件上传到属于用户的 Google 云端硬盘(我们称他为 Bob)。我使用了Google Drive service account(我们称之为service@gmail.com)。

Bob 在他的 Google Drive 中创建了一个文件夹(“上传”)并与 service@gmail.com 共享。

服务帐户 (service@gmail.com) 可以使用 Drive API 列出该共享上传文件夹中的文件并将文件上传到该文件夹​​。上传的文件也会显示在 Bob 的 Google Drive 中。到目前为止一切顺利。

问题

service@gmail.com 上传的文件的所有者是 service@gmail.com,正如人们所预料的那样。这会产生以下后果:

  1. 由于 service@gmail.com 是已上传文件的所有者,因此它们会计入该帐户的配额。不过,Bob 为他的 Google 云端硬盘购买了更多空间,并希望上传的文件计入他的配额,以免服务帐户空间不足。
  2. 当之前由 service@gmail.com 上传的文件被(由 Bob)从共享上传文件夹中删除时,会发生以下情况:
    • 已删除的文件不会显示在任一用户的上传文件夹中。
    • Bob 仍然可以在他的“所有项目”视图中看到已删除的文件。
    • 当服务帐户通过 API 列出所有文件但没有任何父文件(即它是孤立的)时,已删除的文件仍会出现问题。
    • 通过API获取已删除文件详情时,显示配额已用完。

怎么办?

如何(干净地)处理这个用例?我看到了 2 种可能的解决方案:

  1. 上传文件时,将所有权设置为 Bob。这可能吗? 这行不通!首先,它不适用于普通帐户的上传文件。其次,服务帐户有一个电子邮件@developer.gserviceaccount.com,而Bob 的帐户有@gmail.com。来自doc 说:

Google Apps 客户:您不能让域外的人成为您 Google 文档的所有者。只有 Premier、Government 和 Education 域中的 Google Apps 客户可以转让已同步或上传文件(如 PDF 或图像文件)的所有权。

Consumer Drive 用户:您不能转让已同步或上传文件(如 PDF 或图像文件)的所有权。

  1. 不要使用服务帐户,而是让 Web 应用程序直接使用 Bob 的帐户。但是,这确实需要为 Bob 获取 OAuth 访问令牌。此外,使用具有共享上传文件夹的服务帐户允许我将服务帐户的访问权限限制为仅上传文件夹。
  2. 定期搜索服务帐户中的孤立文件以清理它们。但是,这并不能解决用于未删除文件的配额问题...

请帮忙!

关于offline access and access tokens的信息

【问题讨论】:

    标签: google-drive-api


    【解决方案1】:

    我认为你应该看到这个页面:Perform Google Apps Domain-Wide Delegation of Authority。此页面显示如何使用 SA 代表 Bob 用户调用请求。此页面包含Java 代码,该代码描述了如何为Bob 创建Drive 对象。使用此Drive,您将能够上传文件,文件的所有者将是Bob 而不是 service@gmail.com。我经常使用这种方法,它对我有用。

    【讨论】:

    • 非常有趣,谢谢。我正在使用与 Google Apps 帐户未关联的常规帐户进行开发,但我会尝试一下。我必须确保 Bob 也使用 Google Apps。
    猜你喜欢
    • 1970-01-01
    • 2015-01-06
    • 2019-03-07
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多