googleapi:403:已超出此文件的下载配额。信誉良好,文件是新的

时间:2020-02-21 23:52:39

标签: google-drive-api

请注意,此问题似乎与我所见过的其他“超出配额”问题不同。这不是一个坏消息,也不是一个下载量很大的文件。

2020/02/21 15:44:49 ERROR : test.mkv: Failed to copy: multpart copy: failed to open source: open file failed: googleapi: Error 403: The download quota for this file has been exceeded., downloadQuotaExceeded
  1. 我仅通过API收到此错误。
  2. 可以使用相同的凭据访问此共享驱动器中的其他文件。
  3. 这不会影响其他用户的文件(即:我使用实际的Google帐户(而非服务帐户)进行了测试,并且能够通过用户界面下载文件。

那么怎么回事?当用户没有权限时,我已经习惯了使用403的Google API,甚至在我还没有授予权限的情况下,甚至已经看到了这种“原因”。但是在这种情况下,权限似乎还不错(无论如何,它们都已设置在云端硬盘级别)。

重要上下文:

  1. 存在此问题的文件是从...公共来源复制的。这些文件可能已经超出了其下载配额。但是这些是我在自己的驱动器中制作的副本。

  2. 更具体地说,我已经通过网络界面将文件复制到了云端硬盘中,这些文件从未出现问题。

  3. 但是,这些新文件有问题-我通过Drive API复制了它们。但是他们说它们归我的服务帐户所有,我找不到与它们复制自的原始文件的任何链接。就像我手动复制它们一样,它们具有自己的文件ID,与它们从中复制的文件ID不同。

我很怀疑:

  1. 也许通过UI执行的复制与通过API执行的复制有所不同?

  2. 以某种方式我的文件“副本”与我原来复制的原始文件有更强的链接?

否则,我没主意了。任何建议将不胜感激。

编辑:

手动复制方法:文件文件,为其添加星号,导航至云端硬盘用户界面,转到已加星标的项目,右键单击该文件“进行复制”。

新的API方法:使用Rust可以做到这一点:

let url = format!("https://www.googleapis.com/drive/v3/files/{}/copy", file_id);

let auth_hdr_val = format!("Bearer {}", token.as_str());
let mut query_params = HashMap::new();
query_params.insert("supportsAllDrives", true);
query_params.insert("supportsTeamDrives", true);

let mut body = HashMap::new();
body.insert("parents", [destination_parent_dir]);

client
    .post(&url)
    .query(&query_params)
    .header(reqwest::header::AUTHORIZATION, auth_hdr_val)
    .json(&body)
    .send()

没有什么大不了的,只需调用v3驱动器复制API,并指定一个父目录即共享驱动器即可。 (如果我先将API复制到驱动器,然后手动将其移动到共享驱动器,似乎也会发生这种情况。)

2 个答案:

答案 0 :(得分:0)

Google云端硬盘具有未记录的API限制。似乎其中之一是每个用户,每个文件的限制。

我切换了用于下载特别有问题的文件的服务帐户,并且下载成功。

似乎“新”方法不是问题,而是另一项服务正在索引Google云端硬盘中的“新”文件,并超出了此限制。用于下载的服务帐户已与一个索引共享。

因此,请避免达到这些限制,或者将不同的服务帐户用于不同的角色,等等。

答案 1 :(得分:0)

我知道您找到了解决该问题的方法,但是看来您遇到的问题是以前由其他人在Issue Tracker上报告的:

您可以点击此页面左上角发行号旁边的☆,因为它可以让Google知道更多人正在遇到这种情况,因此更有可能看到更快的速度。