如何在使用服务帐户上传时修复Google云端硬盘的存储空间不足问题

如果您使用的是Google Apps for Work(也称为G-Suite),并通过云端硬盘API将file upload到Google云端硬盘,那么您最终会看到一条如下所示的错误消息:

Error: The user's Drive storage quota has been exceeded. 

阅读下面了解为什么发生这种情况,以及如何解决这个问题

背景:

Google云端硬盘API使用“服务帐号”进行授权,而不是“普通用户”。 Google目前没有办法增加服务帐户的15GB限制,也没有购买额外空间的机制。 一旦你消耗了你的标准空间分配,你将不能上传任何额外的文件。

人力/普通G-Suite用户也可以获得标准的15GB,但是只需要简单的select就可以将其增加到100GB或更多,仅仅是便士。

那么,如何将file upload到人类账户的存储配额而不是服务账户,这样您就可以拥有足够的空间了? 这其实很简单! 只是没有超好logging…

解:

此解决scheme是configuration您的服务帐户以模拟人员帐户。 这意味着您仍然使用服务帐户对Drive API进行身份validation,但服务帐户有权代表人员帐户进行操作,并且会根据该用户的配额分配存储空间。

准备:这很重要。 请仔细阅读此处的说明,以确保您的服务帐户正确设置为模仿 。 任何偏离这会给你随机的错误,会挫败你,浪费时间。 该服务帐户需要在Google IAM控制台中启用DwD(域范围委派),并且需要允许其访问Googlepipe理员网站的API客户端访问页面中的云端硬盘范围。

现在您的服务帐户已经正确设置,为了模拟常规帐户,您只需在创buildJWT客户端时指定人员帐户电子邮件地址即可。

在NodeJS中,它看起来像这样(注意最后一个参数):

let jwtClient = new GoogleApi.auth.JWT( service_account_email, null, private_key, ['https://www.googleapis.com/auth/drive'], 'impersonated_user@mydomain.com');

对于其他语言,请参阅官方Google文档以了解如何模拟用户。

当您的云端硬盘API脚​​本现在上传文件时,这些常规用户将拥有这些文件,并且空间将从其配额中分配。 增加这一点是微不足道的,可以由任何pipe理员或联系G-Suite支持来完成。