2012-04-25 28 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。