使用Google Drive API的服务帐户配额,孤立文件和上传

时间:2014-07-03 17:53:14

标签: google-drive-api

上下文

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

Bob在其Google云端硬盘中创建了一个文件夹("上传")并与service@gmail.com共享。

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

问题

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

  1. 由于service@gmail.com是上传文件的所有者,因此会计入该帐户的配额。但是,Bob为他的Google云端硬盘购买了更多的空间,并希望上传的文件能够计入他的配额,以免服务帐户空间不足。
  2. 如果从共享上传文件夹中删除了以前由service@gmail.com上传的文件(Bob),则会发生以下情况:
    • 删除的文件未显示在任一用户的uploads文件夹中。
    • Bob仍然可以在他的"所有项目"中找到已删除的文件。图。
    • 当服务帐户通过API列出所有文件但未包含任何父级(即它已成为孤儿)时,已删除的文件仍然会响起。
    • 通过API获取已删除的文件详细信息时,表明它正在使用配额。
  3. 怎么办?

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

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

      Google Apps客户:您无法将自己域外的人视为Google文档的所有者。只有Premier,Government和Education域中的Google Apps客户才能转让同步或上传文件(如PDF或图像文件)的所有权。

           

      Consumer Drive用户:您无法转移同步或上传文件(如PDF或图像文件)的所有权。

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

        有关offline access and access tokens

        的信息

1 个答案:

答案 0 :(得分:1)

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