使用服务帐户上传到 Google Drive 共享文件夹时硬性限制为 16GB

问题描述 投票:0回答:1

我已经编写了一个 Rust 程序,使用 crate google-drive3 将文件(每个 100GB)上传到我的个人 google 驱动器,该驱动器有 10TB 的空间,作为我的 Google One 计划的一部分。我正在使用服务帐户,并将文件上传的父文件夹指定为我的云端硬盘中已与服务帐户共享的文件夹。当我运行上传时,需要几个小时(大概上传整个文件),然后给出错误“超出用户存储配额”,并且文件未保存在驱动器上。 查询 API 的存储配额信息显示,虽然我的文件完全在 max_upload_size 范围内,但它不在限制范围内,即只有 16106127360 字节,即 16GB!

我尝试过的其他事情:

当我使用交互式身份验证时,上传工作正常,但现在我尝试使用服务帐户时出现该错误。但是,首选使用服务帐户,因为交互式身份验证对我的用例来说很糟糕。 有些人建议不要与服务帐户共享文件夹,而是使用“域范围委派”来模拟用户,但启用此操作的说明涉及特殊的管理面板,并且登录告诉我我的谷歌帐户无法使用它,我需要一个具有“托管谷歌服务(例如工作空间)”的帐户,即适合我没有也永远不会拥有的企业的东西。 我读到,尽管措辞错误,但此处引用的存储配额不是针对每个用户的,而是针对 GCP 中的项目的。但是,当我在 GCP 中查找该项目的配额列表时,没有一个与存储相关。还有另一个用于请求增加配额的选项卡,但它是空的,并且有一条消息表明该项目没有可扩展的配额。我还了解到,只有当您有与该项目相关的账单信息时,适用的配额才会显示在此处,但我正在尝试上传到我已经从 Google One 获得的大型个人驱动器,我并不是试图在 GCP 上购买存储空间。 我已经仔细检查了 Stack Overflow 上类似问题的解决方案,例如,我已经在使用 .supports_all_drives(true) 并且问题与填充驱动器的现有使用情况无关,问题是总体存储限制。

那么,主要问题是如何绕过仅在使用服务帐户时施加的 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::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
google-cloud-platform rust google-drive-api
1个回答
0
投票

Google 建议使用其客户端与其服务进行交互。

云客户端库是访问云的推荐选项 以编程方式提供 API,其中 可用的。 来源

话虽如此,没有 RUST 客户端,并且

gsutil
通常用于将大文件移入/移出 GCP。有什么原因导致您无法使用,例如Google Cloud Storage:Node.js 客户端? ...或

© www.soinside.com 2019 - 2024. All rights reserved.