NodeJS 如何修复使用服务帐户上传时Google Drive的存储超出问题

eqqqjvef  于 2023-04-29  发布在  Node.js
关注(0)|答案(1)|浏览(128)

如果您正在使用Google Apps for Work(也称为G-Suite)并通过云端硬盘API将文件上传到Google云端硬盘,您最终会发现自己出现如下错误消息:

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

阅读下面的内容,了解为什么会发生这种情况以及如何解决。

58wvjzkj

58wvjzkj1#

背景:

Google Drive API是使用“服务帐户”授权的,而不是普通的“人类用户”。谷歌目前没有办法提高服务帐户的15 GB限制,也没有购买额外空间的机制。一旦你用完了你的标准空间分配,你将被阻止上传任何额外的文件。
人类/普通G-Suite用户也可以获得标准的15 GB,但可以通过简单的选项将其增加到100 GB或更高,只需几分钱。
那么,如何根据人工帐户而不是服务帐户的存储配额上传文件,以便您可以拥有所需的所有空间?其实很简单!只是没有很好的记录。..

解决方案:

此解决方案是配置您的服务帐户以 * 模拟 * 人类帐户。这意味着您仍然使用服务帐户对Drive API进行身份验证,但服务帐户已被授权代表人工帐户进行操作,并且存储空间将从该用户的配额中分配。
Prep:这很重要。Carefully review the instructions here to make sure your service account is set up correctly for impersonation。任何偏离都会给你带来随机错误,这会让你沮丧,浪费时间。服务帐户需要在Google IAM Console中启用DwD(domain-wide-delegation),并且需要允许它访问Google Admin site的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支持。

相关问题