【问题标题】:google drive api returns 403 forbidden when downloading file contentgoogle drive api在下载文件内容时返回403禁止
【发布时间】:2020-11-12 14:53:27
【问题描述】:

我正在尝试使用 Ruby Google::Apis::DriveV3::DriveService#get_revision 的 google drive api 下载文件的先前版本的内容:

Tempfile.create('file_revision-', encoding: 'ASCII-8BIT') do |temp_file|
  drive_api_service.get_revision(file_id, revision_id, download_dest: temp_file)
  # work with the content
end

我不断收到Google::Apis::ClientError,状态码为 403,原因短语“禁止”。范围https://www.googleapis.com/auth/drive 已启用,并且仅当我尝试下载修订内容时才会出现错误。如果我在没有参数download_dest 的情况下运行代码,则请求成功,没有任何问题。我还能够获取任何元数据或修订、导出文件、上传文件等,仅当我尝试通过get_file 或get_revision 获取内容时才会出现问题。

有人遇到过这个问题吗? 是否需要特别添加其他权限才能允许内容下载?

我还查看了有关堆栈溢出的其他问题,并检查了我能找到的 google drive api 的所有可能配置,一切似乎都已启用。

【问题讨论】:

  • 你好@JanHric!我试图用你的代码重现错误,但我做不到。为了更好地研究您的场景,您能否分享一个无需任何修改即可复制问题的最小示例?为了防止任何错误文件,您是否检查过此错误是否出现在其他文件上?另外,由于这是 403 错误,您是否完全拥有该文件?您是否实现了凭据处理代码?
  • 感谢您对@Jacques 的关注,我设法找到了我的一位同事的问题 - google api 根本不允许为本地 google 驱动器文件下载内容。
  • 我看到了你的新评论和答案。确实,您应该使用Files.export() 来下载 Workspace 文件。 Here 是如何使用该方法下载 PDF 文件的示例。我了解您的原始场景需要字节流,前一种方法是否算作满足您需求的有效解决方法?如果没有,请分享为什么您的代码需要二进制输入。
  • 我需要恢复一个文件的上一个版本,但是没有api,所以我想下载以前的内容并再次上传,手动恢复上一个版本,导出不会为此工作,因为我会以不同的格式获得内容。

标签: ruby google-api google-drive-api google-docs-api


【解决方案1】:

目前,Google drive api 不支持本地 google drive 文件(google 文档、表格等)的内容下载,因此您无法下载内容(当前或旧版本),您只能将其导出到不同的哑剧类型。

【讨论】:

    猜你喜欢
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    相关资源
    最近更新 更多