我正在尝试使用官方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的日志输出(在第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 <init>: -------------- 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和客户端密码:我注意到有两个客户端ID和客户端秘密显示在API控制台,一个“Web应用程序的客户端ID”和另一个“Drive SDK的客户端ID”。我之前使用过一个用于Web应用程序,所以我尝试切换到Drive SDK的那个。不幸的是,这并没有改变任何事情。同样的错误......:/
答案 0 :(得分:7)
根据您的日志,您的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的访问权限。为了做到这一点:
我们的文档的Get started > Register an App部分对此进行了描述。您还应确保通过使用入门的其他子部分。
答案 1 :(得分:1)
我最终设法让它发挥作用。我不确定之前是什么问题,但这里有一些针对那些面临类似问题的提示:
“Web应用程序的客户端ID”和“Drive SDK的客户端ID”使我感到困惑。遗憾的是,文档并没有告诉您在哪个地方使用哪一个,但似乎您只需要“Web应用程序的客户端ID”。
如果您更新Chrome扩展程序或API控制台,则可能需要一些时间才能识别出这些更改。例如,在API控制台中更改OAuth客户端ID可能需要一些时间才能生效,因为每个人都在缓存。如果您正在测试您的应用程序,删除缓存和cookie有助于加快这一过程。
祝你的应用程序好运,感谢所有帮助我的人!
答案 2 :(得分:1)
我使用了Google的dredit示例中分发的java OAuth代码,用于执行“打开方式”流程的程序,同样收到了403错误。
我不得不深入研究OAuth代码以找到问题,其中我在其他地方没有提到403错误的来源。基本上,CredentialMediator的ExchangeCode方法假设只有一个重定向uri,这是您希望转到的那个。对我来说情况并非如此,并导致CodeExchangeException。
要解决这个问题,你可以按下client_secrets中的uris列表,这样你想要重定向到的uri是第一个或者其他类似的,但是如果这个方法可以转到uris中的任何一个,那么它将需要参数化。
我希望这有助于某人根除他们的403 gremlin。