mwi*_*but 4 google-api google-apps node.js google-drive-api
如果您正在使用 Google Apps for Work(也称为 G-Suite)并通过 Drive API 将文件上传到您的 Google Drive,您最终会发现自己收到如下所示的错误消息:
Error: The user's Drive storage quota has been exceeded.
Run Code Online (Sandbox Code Playgroud)
阅读下文以了解发生这种情况的原因以及如何解决。
背景:
Google Drive API 是使用“服务帐户”授权的,而不是普通的“人类用户”。Google 目前没有办法增加服务帐户的 15GB 限制,也没有购买额外空间的机制。用完标准空间分配后,您将无法上传任何其他文件。
人类/普通 G-Suite 用户也可以获得标准的 15GB,但可以通过简单的选项将其增加到 100GB 或更多,而只需几美分。
那么,您如何根据人工帐户而不是服务帐户的存储配额上传文件,以便您可以拥有尽可能多的空间?其实真的很简单!只是没有很好的记录......
解决方案:
此解决方案是将您的服务帐户配置为模拟人工帐户。这意味着您仍然使用服务帐户对 Drive API 进行身份验证,但服务帐户被授权代表人类帐户执行操作,并且存储空间将从该用户的配额中分配。
准备:这很重要。仔细查看此处的说明以确保您的服务帐户设置正确以进行模拟。任何偏离都会给您带来随机错误,这会让您感到沮丧并浪费时间。服务帐户需要在Google IAM 控制台中启用 DwD(域范围委托),并且需要被允许访问Google 管理站点的 API 客户端访问页面中的 Drive 范围。
现在您的服务帐户已正确设置,要模拟普通帐户,您只需在创建 JWT 客户端时指定个人帐户电子邮件地址。
在 NodeJS 中它看起来像这样(注意最后一个参数):
let jwtClient = new GoogleApi.auth.JWT(
service_account_email,
null,
private_key,
['https://www.googleapis.com/auth/drive'],
'impersonated_user@mydomain.com');
对于其他语言,请参阅 Google 官方文档以了解如何模拟用户。
当您的 Drive API 脚本现在上传文件时,这些文件将归该普通用户所有,并且空间将从他们的配额中分配。增加这个是微不足道的,可以由任何管理员或通过联系 G-Suite 支持来完成。