簡體   English   中英

Google Drive SDK - Java示例無效

[英]Google Drive SDK - Java sample not working

我正在嘗試使用官方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 <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的那個。 不幸的是,這並沒有改變任何事情。 同樣的錯誤...:/

根據您的日志,您的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控制台,則可能需要一些時間才能識別出這些更改。 例如,在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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM