使用服务帐户上传时如何修复 Google Drive 的存储空间不足问题

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)

阅读下文以了解发生这种情况的原因以及如何解决。

mwi*_*but 7

背景:

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 支持来完成。

  • 嗨 - 我觉得很奇怪,五年来只有 7 票赞成。我们刚刚遇到了同样的问题,这真的是解决这个问题的唯一方法吗?或者是否有一个更新的选项尚未添加到此处?(感谢您的帖子 - 我们最终可能会走这条路线,如果是这样,它将节省我们很多时间!) (2认同)