使用Pydrive2调用谷歌服务账号上传触发Drive存储配额超限问题
问题根源
你遇到的问题核心是:服务账号拥有独立的Google Drive存储配额,脚本上传的内容归属服务账号,占用的是服务账号自身的配额(默认15GB),而非那个标准账号的配额。手动用标准账号上传时,内容归标准账号所有,消耗的是标准账号的存储空间,所以不会触发配额超限。
解决方法
1. 检查服务账号的存储使用情况
先确认服务账号的配额是否真的已满:
- 通过Pydrive2调用API查询:
from pydrive2.auth import GoogleAuth from pydrive2.drive import GoogleDrive gauth = GoogleAuth() gauth.ServiceAuth() drive = GoogleDrive(gauth) # 获取存储配额信息 about = drive.GetAbout() print(f"已使用存储: {about['quotaBytesUsed']/1024/1024/1024:.2f} GB") print(f"总配额: {about['quotaBytesTotal']/1024/1024/1024:.2f} GB") - 或用gcloud CLI(需先配置服务账号密钥):
gcloud auth activate-service-account --key-file=your-service-account-key.json gcloud drive storage quota list
2. 释放服务账号的存储配额
如果服务账号配额已满,先清理冗余内容:
- 登录服务账号的Drive(通过Google Cloud控制台的服务账号页面,点击"登录到Drive"),删除无用文件/文件夹
- 务必清空回收站,回收站中的内容同样占用存储配额
3. 让上传内容归属标准账号(彻底解决配额冲突)
如果希望上传的内容占用标准账号的配额,可在上传后修改文件所有者为标准账号:
from pydrive2.auth import GoogleAuth from pydrive2.drive import GoogleDrive gauth = GoogleAuth() gauth.ServiceAuth() drive = GoogleDrive(gauth) # 上传文件到目标文件夹 target_folder_id = "你的目标文件夹ID" file = drive.CreateFile({ 'title': "要上传的文件名", 'parents': [{'id': target_folder_id}] }) file.SetContentFile("本地文件路径") file.Upload() # 将标准账号设置为文件所有者 standard_account_email = "你的标准账号邮箱" file.InsertPermission({ 'type': 'user', 'value': standard_account_email, 'role': 'owner' }) # 可选:移除服务账号的所有者权限(避免后续误操作占用服务账号配额) # service_account_email = "你的服务账号邮箱" # file.DeletePermission(service_account_email)
修改所有者后,文件的存储配额会转移到标准账号下,后续服务账号上传的内容也不会再占用自身配额。
4. 升级服务账号的存储配额(长期方案)
如果必须让内容归服务账号所有且需要更大存储空间,可以给服务账号绑定Google Workspace或Google One付费套餐,提升存储上限。
内容的提问来源于stack exchange,提问作者Abdulaziz Ibrahim
相关产品推荐
相关产品推荐

