在多次成功的文件更新后,有一次更新返回的文件 id 是 drive:v1 而不是有效的文件 id。此外,根据 App Engine 日志,有问题的请求需要 10 秒(通常不到 1 秒),而不是因为 App Engine 实例启动时间非常奇怪。
我使用的代码基于 Google Drive SDK Python 示例应用程序 DrEdit,并且只做了一些修改(我添加了 Base64 编码,因为我传输的是微小的图像,而不是文本)。
更具体地说,在 ServiceHandler 类的 put 方法的示例代码中,这段代码应该在更新文件后返回文件 id:
# Respond with the new file id as JSON.
self.RespondJSON(resource['id'])
这工作了很多次,但有一次它返回驱动器: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()
顺便说一句,put 方法中的注释“使用新的文件 ID 作为 JSON 响应”使它看起来在更新文件后文件 ID 会更改,但似乎并非如此。这很令人困惑,除非文件 id 有时在更新后确实发生了变化,否则更改它可能是一个好主意。