Google Drive SDK – Java示例无效

我正在尝试使用官方Java示例熟悉Google Drive API。 但是,在浪费了几个小时并尝试将样品放置两次之后,我仍然无法按预期使用它。

它不是显示文件的内容,而是在FileServlet(/ svc路径)中抛出404错误。 更具体地说, service.files().get(fileId).execute(); 似乎返回null。 我已尝试使用不同的文件,不同的MIME类型,直接来自Google云端硬盘以及使用Google文件选择器。

我已尽可能地遵循https://developers.google.com/drive/examples/java中描述的步骤。

有没有人能够让样本运行?

编辑:这是请求URL /svc?file_id=0B08R9MrOE-ejZTY2M2I5MjAtYmVjZS00OTkyLWI4ZTEtOTg4OGM3YTIxMWEw时FileServlet的日志输出/svc?file_id=0B08R9MrOE-ejZTY2M2I5MjAtYmVjZS00OTkyLWI4ZTEtOTg4OGM3YTIxMWEw (在第78行抛出404错误):

 2012-04-26 08:21:36.077 com.google.api.client.http.HttpRequest execute: -------------- REQUEST -------------- GET https://www.googleapis.com/drive/v1/files/0B08R9MrOE-ejZTY2M2I5MjAtYmVjZS00OTkyLWI4ZTEtOTg4OGM3YTIxMWEw Accept-Encoding: gzip User-Agent: Google-HTTP-Java-Client/1.8.3-beta (gzip) D 2012-04-26 08:21:36.263 com.google.api.client.http.HttpResponse : -------------- RESPONSE -------------- 403 OK content-type: application/json; charset=UTF-8 content-encoding: gzip date: Thu date: 26 Apr 2012 06:21:36 GMT expires: Thu expires: 26 Apr 2012 06:21:36 GMT cache-control: private cache-control: max-age=0 x-content-type-options: nosniff x-frame-options: SAMEORIGIN x-xss-protection: 1; mode=block content-length: 188 server: GSE x-google-cache-control: remote-fetch via: HTTP/1.1 GWA D 2012-04-26 08:21:36.265 com.google.api.client.http.HttpResponse getContent: Response size: 188 bytes D 2012-04-26 08:21:36.271 com.google.api.client.http.HttpResponse getContent: { "error": { "errors": [ { "domain": "usageLimits", "reason": "dailyLimitExceededUnreg", "message": "Daily Limit Exceeded. Please sign up", "extendedHelp": "https://code.google.com/apis/console" } ], "code": 403, "message": "Daily Limit Exceeded. Please sign up" } } 

这对我来说听起来很像“我不认识你”,所以我又看了一下我的客户端ID和客户端密码:我注意到API控制台中显示了两个客户端ID和客户端密钥,一个“Web应用程序的客户端ID”和另一个“Drive SDK的客户端ID”。 我之前使用过一个用于Web应用程序,因此我尝试切换到Drive SDK的那个。 不幸的是,这并没有改变任何事情。 同样的错误…:/

根据您的日志,您的404错误似乎是由对Drive API请求返回的403错误引起的。

来自Google API的错误通常会在其正文中包含解释。 在你的情况下:

 "error": { "errors": [ { "domain": "usageLimits", "reason": "dailyLimitExceededUnreg", "message": "Daily Limit Exceeded. Please sign up", "extendedHelp": "https://code.google.com/apis/console" } ], "code": 403, "message": "Daily Limit Exceeded. Please sign up" } } 

这通常意味着您尚未在Google API控制台项目中启用对Google Drive API的访问权限。 为此:

  • 在Google API控制台中打开您的项目
  • 转到“ 服务”部分
  • 单击开/关切换启用Drive SDKDrive API
  • 不要忘记在“ 驱动程序SDK”部分配置您的应用,并在“API访问”部分中配置您的OAuth设置

这些都在我们文档的“入门”>“注册应用程序”部分中进行了描述。 您还应该确保通过“ 入门”的其他子部分。

我最终设法让它运作起来。 我不确定之前的问题是什么,但是对于那些面临类似问题的人来说,这里有一些提示:

  • “Web应用程序的客户端ID”和“Drive SDK的客户端ID”使我感到困惑。 不幸的是,文档并没有告诉你在哪个地方使用哪一个,但似乎你只需要“Web应用程序的客户端ID”。

  • 如果您更新Chrome扩展程序或API控制台,则可能需要一些时间才能让Drive识别出这些更改。 例如,在API控制台中更改OAuth客户端ID可能需要一些时间才能生效,因为每个人都在缓存。 如果您正在测试应用程序,删除缓存和cookie有助于加快此过程。

祝你的应用好运,感谢所有帮助我的人!

根据我的经验,“403 Quota Exceeded”总是源于未设置的HTPP Authorization标头。

我使用了Google的dredit示例中分发的java OAuth代码,用于执行“打开方式”流程的程序,同样收到了403错误。

我不得不深入研究OAuth代码以找到问题,我在其他地方没有提到403错误的来源。 基本上,CredentialMediator的ExchangeCode方法假设只有一个重定向uri,这是您希望转到的那个。 对我来说情况并非如此,并导致CodeExchangeException。

要解决这个问题,你可以在client_secrets中按下uris列表,这样你想要重定向的uri就是第一个或者其他类似的,但是如果这个方法可以用于任何一个uris,它将需要参数化。

我希望这有助于某人根除他们的403 gremlin。