【发布时间】:2014-09-17 11:10:55
【问题描述】:
我正在尝试将我的应用程序与 Google 云端硬盘同步。现在,当我们将文件上传到云端硬盘时,我们会将文件 ID 和元数据保存在本地(到 Redis)。然后下次我们从云端硬盘收到推送通知时,我们会比较该文件是否与我们本地的版本不同,或者我们是否需要更新、删除或创建文件。
我正在加载这样的文件
media_body = MediaFileUpload(local_path,
mimetype='binary/octet-stream',
chunksize=50000000,
resumable=True)
body = {'title': file_name, 'parents': [{'id': parent_id}]}
request = client.files().insert(
body=body,
media_body=media_body)
response = None
while response is None:
status, response = request.next_chunk()
if status:
print "Uploaded %d%%." % int(status.progress() * 100)
results.append(response)
然后results 会立即保存到 Redis(文件 ID、元数据...)。
问题是我们偶尔会收到推送通知,检测到文件已添加到云端硬盘,但我们尚未将该 ID 保存到 Redis。因此它注册为一个新文件,这意味着我们现在下载它并拥有该文件的两个版本。
我认为这一定是因为 Google Drive 在上传 API 调用返回之前发送了更改的推送通知。我无法在上传之前将 ID 添加到 Redis,因为直到上传函数返回我们才知道它......有人可以提出一个可能的解决方案吗?
【问题讨论】: