我的Android应用更新Google云端硬盘文档。该文件也可以在其他地方修改(例如通过Drive web界面),因此文件上传可能存在冲突。但是,这应该很少发生。这就是为什么我不希望我的应用程序首先查询修订历史记录(因为这在大多数情况下是不必要的),只有在此之后,才更新文件。 如何在更新文件时检测到存在冲突?
到目前为止,我的调查显示getHeadRevisionId() returns null虽然是null head revision id has been reported fixed。 我尝试的另一件事是在update()之前的文件上的setEtag()。 It should have given me error on update,但即使文件已远程更改,上传也会成功!这是使用ETag的正确方法吗?
答案 0 :(得分:1)
“这是使用ETag的正确方法吗?”
是
此外,对于非Docs文件,您还应该检查md5Checksum是否有对内容的更改。
答案 1 :(得分:1)
设置If-Match
HTTP标头:
final Update update = mService.files().update(mDriveFile.getId(), mDriveFile, byteContent);
final HttpHeaders headers = update.getRequestHeaders();
headers.setIfMatch(mDriveFile.getEtag());
update.setRequestHeaders(headers);
mDriveFile = update.execute();
如果同时更改了文档,则更新将被拒绝,其响应类似于:
com.google.api.client.googleapis.json.GoogleJsonResponseException: 412 Precondition Failed
{
"code": 412,
"errors": [
{
"domain": "global",
"location": "If-Match",
"locationType": "header",
"message": "Precondition Failed",
"reason": "conditionNotMet"
}
],
"message": "Precondition Failed"
}