2015-05-04 121 views
3

當我嘗試授予任何文件的訪問權限時,出現500錯誤。當文件與某人共享時,我不想發送電子郵件。我想停止通知電子郵件。使用Google Drive API更新權限時出現500錯誤

Insert insert = service.permissions().insert(fileId, newPerm); 
    insert.setSendNotificationEmails(false); 
    newPerm = insert.execute(); 


     500 OK 
      { 
      "code" : 500, 
      "errors" : [ { 
      "domain" : "global", 
      "message" : "Internal Error. User message: \"An internal              error has occurred which prevented the sharing of these item(s): fileame\"", 
      "reason" : "internalError" 
      } ], 
      "message" : "Internal Error. User message: \"An internal error has occurred which prevented the sharing of these item(s): filename\"" 
      } 

感謝任何建議。

回答

-3

這很可能是Drive API基礎結構中的暫時性錯誤。您有時可能會遇到這類行爲,這是由於Google的網絡或服務器問題導致的。

不幸的是,這些錯誤信息非常有限。建議的策略是執行和指數回退,如解釋here和更詳細的here

在一些(奇怪的)情況下,問題可能會持續比預期更長的時間,這對開發人員來說是一種痛苦,可能令人沮喪,但最終會消失,希望在24-48小時內消失,一切都會回到正常。如果錯誤持續很長時間,您應該向Drive API支持代理請求跟蹤令牌,該代理將在內部生成進一步信息,以供Engineering進行分析。

+1

能否請你告訴我,我該如何處理這個異常。它在我的應用程序中造成麻煩。欣賞你的迴應。謝謝 –

+0

真的沒有更多的細節可以給你嗎?無法更徹底地診斷或記錄錯誤? – SuperBiasedMan

2

我開始得到這個問題,但設法通過在文件推送和權限插入之間引入暫停來解決它。

我的 '工作流程'(使用http的帖子,而不是其他客戶端):

  1. 推送文件。
  2. 獲取fileId出於Google Drive API的響應。
  3. 發送有效載荷中插入使用FILEID

我總是得到500 '內部錯誤' 在第3步許可;該文件始終被成功推送。

在我最初的調試中,當逐步完成時,我會嘗試將相同的文件再次推送給Google,它將返回與之前嘗試使用相同文件相同的fileId(因此Google Drive API必須識別文件是一樣的)。

但是,當我嘗試後續權限插入(仍在調試)具有相同的fileId,它總是成功。

所以,我只是介紹了20S暫停文件推送和權限插入,已做的伎倆(如時間是不是在我的應用非常關鍵)之間

Google雲端硬盤中必須存在某種複製延遲(或'time_til_permissions_can_be_inserted')。很難相信,因爲它是谷歌,但嘿。

1

another answer對此問題,@eversMcc有正確的想法:暫停一下。該錯誤是由於Google雲端硬盤忙於處理該文件(創建該文件,將其推向全局訪問或以其他方式進行更新)。一旦這些活動結束後,向文檔添加其他用戶應該不成問題。

你可以看到從this Drive API documentation page的(500)的描述錯誤,您收到,以及行動的建議當然是實現指數補償,這是真的只是說再次試圖&擴大之前,你應該暫停位延遲每次你得到相同的錯誤。這是same recommendation in the Drive API docs

雖然@eversMcc實現了20秒的暫停,但您不必使用固定的退避持續時間,因此爲什麼指數是有用的。爲什麼只有4或8就足以等20秒?另一個資源是這個描述性博客post。如果你不想自己實現它,你可以嘗試找到類似於這些(基於Python的)retryingbackoff包。如果你想要一個滾動你自己的例子,請查看this related SO Q&A

使用Drive API添加權限或類似的共享文件,複製,導入/導出等任何文件 - 相關操作,但對於任何文件取向操作,說有試算,你會使用代替Google Sheets API

注1:本帖前一年有類似的問題,但根據this SO Q&A修復。

注2:驅動器API V2的permissions.insert()命令V3改名字permissions.create() - 看migration guide更多細節