【发布时间】: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