【问题标题】:Can't retrieve file meta data from Google Drive, 404无法从 Google Drive 中检索文件元数据,404
【发布时间】:2012-07-14 01:56:43
【问题描述】:

我在使用 Google Drive API 时遇到了一些非常奇怪的问题。

请耐心听我说,有很多要解释的。

我最初使用我的一个 Google 帐户使 API 工作 - 为简单起见,我们将其称为 test@google.com。我让 Google Picker UI 正常工作,它正确显示了我的云端硬盘帐户中的文件列表。

我将它设置为我的 APP_ID,并且我有一些服务器端逻辑,它使用官方的 google-ruby-api-client gem 使用 drive.files.get 端点连接到 Drive API。然后我可以使用这个 sn-p 下载文件的元数据:

require 'google/api_client'

client = Google::APIClient.new

# client ID and secret from Google APIs Console
client.authorization.client_id = "{CLIENT_ID}"
client.authorization.client_secret = "{SECRET}"
client.authorization.redirect_uri = "http://myapp.com/users/auth/gdrive"
# access token stored in database from oauth2 flow
client.authorization.access_token = "TOKEN"

client.authorization.scope = [
  "https://www.googleapis.com/auth/drive.file",
  "https://www.googleapis.com/auth/userinfo.email",
  "https://www.googleapis.com/auth/userinfo.profile"
]
result = client.execute!(
  :api_method => 'drive.files.get',
  :version => 'v2',
  :parameters => { 'fileId' => params[:file_id] })

我尝试使用test@google.com 帐户,结果返回文件的元数据,我可以下载该文件。都是桃色的。

当我使用不同的 Google 帐户时,问题就出现了。我可以访问 Picker 中的文件,但是当使用上面的 fileId 将请求发送到服务器时,我只是不断收到 404 错误,说文件不存在。我还尝试使用 google 提供的 OAuth 2.0 Playground 访问文件的元数据,但奇怪的是我仍然收到该错误,但是当我使用 test@google.com 帐户时,我也遇到了相同的 404 错误。

我真正能想到的唯一一件事是,我提交了一个包含所有 Google Drive 详细信息的应用版本,并通过 Chrome Webstore 安装了该应用。在我意识到它作为一个启用驱动器的应用程序向所有人显示后,我立即将其删除并将 manifest.json 文件更改回其正常的非驱动器启用状态。我确实读到您应该通过 Chrome Webstore 安装该应用程序才能正常工作,但我也读到情况不再如此。您安装的 Chrome Webstore 应用程序是否存储在 Google 的云中某处,以便他们知道它是为特定帐户安装的?还是只是在本地安装了网络商店应用程序?我很困惑。

我在这里缺少什么?我已经很久没有对 API 感到如此沮丧了。请帮忙!

【问题讨论】:

  • 您的 AppId 是否有可能以某种特定方式与您的用户帐户相关联?在它“适用于所有人”之前,您是否需要克服一些障碍?
  • 我不这么认为——无论如何,我不能从 Google API 控制台收集到的信息。团队版块下有两个开发者,只有我的账号可以访问。
  • 您是否可能为选择器 API 使用了错误的帐户?如果您使用同一浏览器多次登录,则可能会发生这种情况。
  • @AliAfshar,不——我明确地使用来自userInfo API 的用户 ID 设置帐户。出现的图像来自正确的帐户。是否必须安装 Chrome Webstore 应用才能运行?
  • 不,选择器不需要网上商店。这确实很奇怪。您能否暂时尝试使用完整范围 googleapis.com/auth/drive 来查看问题是否与仅文件范围有关?

标签: ruby-on-rails google-drive-api


【解决方案1】:

感谢 Ali Afshar 的回答 - 解决方案(目前)是暂时使用 Google Drive 的完整范围,而不仅仅是 drive.file 范围。

例如而不是使用这个范围,

https://www.googleapis.com/auth/drive.file

改用这个:

https://www.googleapis.com/auth/drive

【讨论】:

  • 哇,这个很难确定!谢谢@calvin-l 的提示。就我而言,我无法将 Google 文档(其他人创建但允许我访问)转换为 PDF,即使我能够检索其元数据。将范围更改为 https://www.googleapis.com/auth/drive 使整个工作正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-07
  • 1970-01-01
  • 2012-06-11
  • 2021-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多