You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用服务账号上传大文件至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

火山引擎 最新活动