我的 Android 应用程序更新了 Google 云端硬盘文档。该文件也可以在其他地方修改(例如通过云端硬盘网络界面),因此文件上传可能会发生冲突。然而,这种情况应该很少发生。这就是为什么我不希望我的应用程序首先查询修订历史记录(因为这在大多数情况下是不必要的),然后才更新文件。如何检测更新文件时存在冲突?
到目前为止我的调查表明getHeadRevisionId() 返回 null虽然已报告空头修订 ID 已修复。
我尝试的另一件事是在 update() 之前在文件上 setEtag() 。它应该给我更新错误,但是即使文件被远程更改,上传也成功了!这是使用 ETag 的正确方法吗?
Set the 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"
}
注意即使内容没有变化,ETag 也可能会变化.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)