使用服务账号上传大文件至Google Drive共享文件夹时遭遇16GB限制的解决方案求助
使用服务账号上传大文件至Google Drive共享文件夹时遭遇16GB限制的解决方案求助
我最近用Rust的google-drive3 crate写了个程序,要把单文件100GB的内容上传到我的个人Google Drive(我买了Google One的10TB空间)。我用的是服务账号,并且指定了一个已经共享给该服务账号的个人Drive文件夹作为上传目标。
但每次上传都要花好几个小时(看起来是传完了整个文件),然后就报错**"user storage quota exceeded"**,文件也没保存到Drive里。我调用API查了配额信息,发现虽然我的文件远小于最大上传尺寸,但显示的Limit居然只有16106127360字节(也就是16GB)!
我已经尝试过的方法:
- 之前用交互式认证的时候上传完全没问题,但换成服务账号就出这个错。不过我的使用场景真的不适合交互式认证,所以优先想用服务账号解决。
- 有人建议不要共享文件夹给服务账号,而是用“全域委派”来模拟用户,但开启这个需要特殊的管理员面板,而且登录提示我的个人Google账号不支持,得是有“托管Google服务(比如Workspaces)”的企业账号,这我肯定不会买的。
- 我看到有资料说这个报错里的存储配额其实不是用户级的,而是GCP项目的配额。但我去GCP控制台查这个项目的配额列表,根本没有和存储相关的项;申请提高配额的页面是空的,还提示说这个项目没有可扩展的配额。还有人说只有绑定了账单信息的项目才会显示相关配额,但我只是想传到自己已经付费的Google One个人Drive,根本不想在GCP买存储。
- 我也看了Stack Overflow上类似问题的解决方案,比如已经在代码里加了
.supports_all_drives(true),而且我的Drive空间也没满,问题就是这个16GB的总限制。
现在我最想解决的问题是:怎么绕开服务账号带来的这个16GB限制,让我能用上我已经付费的10TB空间?
相关代码片段:
读取服务账号密钥:
oauth2::read_service_account_key(&settings.gdrive.service_account_key_file).await
构建认证器:
oauth2::ServiceAccountAuthenticator::builder(service_account_key).persist_tokens_to_disk(cache_path).build().await
创建DriveHub对象:
DriveHub::new(hyper::Client::builder().build(hyper_rustls::HttpsConnectorBuilder::new().with_native_roots().https_or_http().enable_http1().enable_http2().build()), auth)
上传逻辑:
hub.files().create(file_props) .use_content_as_indexable_text(false) .supports_all_drives(true) .keep_revision_forever(false) .ignore_default_visibility(false) .delegate(&mut UploadDelegate::new()) .upload_resumable( file, mime_type.clone() ) .await
备注:内容来源于stack exchange,提问作者zolcos




