許多成功的文件更新後,有一個更新返回的文件ID是驅動器:v1而不是有效的文件ID。此外,根據App Engine日誌,有問題的請求花費了10秒(通常不到1秒),而不是因爲App Engine實例啓動時間很奇怪。爲什麼文件更新有時會返回drive:v1作爲文件ID?
我使用的代碼基於Google Drive SDK Python示例應用程序DrEdit,並且只是稍作了修改(我添加了Base64編碼,因爲我傳輸的是小圖片,而不是文本)。
更具體地講,在在的ServiceHandler類的put方法示例代碼,這段代碼應該更新文件後,返回文件ID:
# Respond with the new file id as JSON.
self.RespondJSON(resource['id'])
這個工作很多次,但有一次它返回drive:v1。儘管更新仍然正確地更改了文件,但文件ID問題除外,請求按其應有的方式工作。
下面是我對受此影響的示例代碼的部分進行的修改:
resource = service.files().update(
id=data['resource_id'],
newRevision=True,
body=None,
media_body=MediaInMemoryUpload(base64.b64decode(data.get('content', '')),
data['mimeType']),
).execute()
順便說一句,註釋「的新文件ID爲JSON響應」在put方法使它看起來像更新文件後文件ID會改變,這似乎並不是這種情況。這很令人困惑,除非有時文件ID在更新後實際發生更改,否則更改它可能是一個好主意。
評論更新我不認爲我可以提供再現這一點,因爲觸發,這是不以任何方式特別,之前工作的罰款無數次請求的樣本。長時間的請求可能表明App Engine或Drive API服務器出現了一些問題,導致此問題發生。但是我會在應用程序的這部分添加一些日誌記錄,以便如果再次發生這種情況,我將能夠提供更多信息。例如,如果知道文件資源的其他字段也有奇怪的值,或者它甚至是返回的文件資源,將會很有趣。 – HaiColon