2012-04-25 108 views
4

我试图使用官方的Java示例来熟悉Google Drive API。然而,在浪费了几个小时并试图将样品放置两次之后,我仍然无法按预期使用它。Google Drive SDK - Java示例不能正常工作

不是显示文件的内容,而是在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的日志输出(404错误是在管线78扔):

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和客户端密钥:我注意到在API控制台中显示了两个客户端ID和客户端密码,一个是”Web应用程序的客户端ID“,另一个是” Drive SDK的客户端ID“。我之前使用过一个用于Web应用程序的版本,因此我试图切换到Drive SDK的版本。不幸的是,这并没有改变任何东西。同样的错误...:/

+3

您可以更改[logging.properties](https://code.google.com/p/google-drive-sdk-samples/source/browse/java/war/WEB-INF/logging.properties#13 )记录API请求的更多细节并向我们展示响应正文? – Alain 2012-04-25 21:46:23

+1

FWIW,我写了样本及其指南。你能否给我一个确切的行号码来产生404?/svc请求什么网址? GET/svc需要file_id参数。 – 2012-04-26 04:58:02

+0

@VicFryzel,谢谢你们!我更新了日志输出的帖子。 – TomTasche 2012-04-26 06:35:33

回答

1

我最终设法让它工作。我不知道是什么问题之前,但在这里是为那些谁正面临类似问题的一些提示:

  • 的“Web应用程序的客户端ID”和“为驱动SDK客户端ID”搞糊涂了。不幸的是,文档没有告诉你在哪个地方使用哪一个,但似乎只需要“Web应用程序的客户端ID”。

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

祝您的应用程序顺利,感谢所有帮助过我的人!

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的访问。为了做到这一点:

  • Google APIs Console
  • 去打开你的项目的服务部分
  • 启用驱动SDK驱动API通过点击开/关切换
  • 请不要忘记在Drive SDK部分中配置您的应用,并在** API Access部分中配置您的OAuth设置

这些都在我们文档的Get started > Register an App部分中描述。您还应该确保您通过开始的其他小节。

+0

那么,* FileServlet *会抛出404错误,但你说得对,实际问题是Google抛出403错误。我认为示例说明包含了所有必要步骤,但我会看看您建议的文档。谢谢! – TomTasche 2012-04-26 13:38:16

+0

好的,我已经看过了建议的文档,但它们与我已经跳过的文档相同。在我的API控制台中,Drive SDK和Drive API的状态为绿色,“Drive SDK”选项卡中的所有内容都已正确配置(MIME类型,“Drive SDK的客户端ID”,URL,所有三个范围)已通过Chrome网上应用店安装,并且已在client_secrets.json中配置了“Drive SDK的客户端ID”。我无能为力。 – TomTasche 2012-04-26 13:50:40

+0

你实际上是否超出了每天10,000个查询的默认配额? – 2012-04-26 15:08:49

1

根据我的经验,“403 Quota Exceeded”始终源于未设置HTPP授权标头。

1

我使用了在Google的dredit示例中发布的java OAuth代码,该程序通过“打开”流程并同样收到403错误。

我不得不挖掘OAuth代码来查找问题,我没有在其他地方看到关于403错误的来源。本质上,CredentialMediator的ExchangeCode方法假定只有一个重定向uri,这是你希望去的。这不是我的情况,并导致CodeExchangeException。

解决方案您可以在client_secrets中按摩uris列表,以便您希望重定向到的uri是第一个或某些类型的,但如果此方法可以转到任何一个uris,它将需要参数化。

我希望这可以帮助别人根除他们的403 gremlin。