有没有一种可靠的方法,比较全部内容,检查文件是否在Drive中更新/更改?
我一直在努力解决这个问题。这是我尝试过的两件事:
1.档案version
号码
我将纯文本文件上传到Google云端硬盘(qazxsw poi,qazxsw poi),并在成功上传后从simple upload中保存qazxsw poi。
然后我偶尔轮询Drive API(update endpoint)以检查版本是否已更改。
麻烦的是,在上传文件的一两秒内,版本再次出现问题。
文件内容没有变化。该文件尚未在其他任何地方打开,查看甚至下载。尽管如此,版本号仍然比上传后的版本号增加了。
对于我的代码,此版本号更改表示远程文件已在Drive中更改,因此它会下载新版本。每次!
2. version
终点
作为替代方案,我尝试使用file metadata。
上传文件后,我使用get endpoint或Changes
获得Changes api。
稍后我使用此page token
轮询Changes API以进行更改,并过滤上传文件的fileId的更改。轮询更改时我使用这些选项:
changes.getStartPageToken
这里再次出现与版本号相同的问题。上传文件后立即返回的页面标记会在一两秒内再次更改。新页面标记显示已更改的上载文件。
同样,文件内容没有变化。它尚未在其他任何地方打开,更新和下载。它不与其他任何人共享。
然而,在上传几秒钟后,文件会重新出现在更改列表中。
因此,假设远程更改,本地代码会从Drive重新下载文件。
可能的解决方法
作为一个hacky hook,我可以在文件上传后等待几秒钟,然后再获取新的file-version / changes-page-token。这可能会解决延迟版本增量问题。
但是,没有关于导致版本号(或changes.list)中的幻像更改的原因的文档。所以,我无法确定:
有没有一种可靠的方法,比较全部内容,检查文件是否在Drive中更新/更改?
如果您的文件不是Google Doc文件(即二进制文件),您可以尝试使用changes.list
的page token
属性。您应该能够使用它来跟踪二进制文件内容的更改。
您也可以使用{
"includeRemoved": false
"restrictToMyDrive": true
"spaces": "drive"
}
。
md5Checksum
也有File resource object财产。
您所看到的是Google Drive文件系统的最终一致性功能。如果您考虑搜索,搜索索引的更新速度并不重要,只是它最终会更新并且非常有效。 Google云端硬盘的工作原理相同。
Drive会尽快确认您的更新。早在这些更新传播到您的文件的所有全球副本之前很久。在更新完成后,还会计算派生数据(例如,时间戳,我想我记得,md5sums)。
解决方案在很大程度上取决于冗余同步对您的应用程序的问题。
作为解决方法,如何使用Drive Activity API?我认为你的情况有几个答案。所以请把它想象成其中之一。
使用Drive Activity API时,可以检索有关目标文件的活动信息。例如,从Revisions API,您可以查看目标文件是否已编辑,重命名,删除等。
样本端点和请求正文如下。
Revisions resource object
md5Checksum
样品响应如下。您可以从中看到相关信息。在时间戳记编辑了带有fileId和filename的文件。
ActionDetail
POST https://driveactivity.googleapis.com/v2/activity:query?fields=activities%2CnextPageToken
。{"itemName": "items/### fileId of target file ###"}
{
"activities": [
{
"primaryActionDetail": {
"edit": {} <--- If the target file was edited, this property is added.
},
"actors": [
{
"user": {
"knownUser": {
"personName": "people/### userId who edited the target file ###",
"isCurrentUser": true
}
}
}
],
"actions": [
{
"detail": {
"edit": {}
}
}
],
"targets": [
{
"driveItem": {
"name": "items/### fileId of target file ###",
"title": "### filename of target file ###",
"file": {},
"mimeType": "### mimeType of target file ###",
"owner": {
"user": {
"knownUser": {
"personName": "people/### owner's userId ###",
"isCurrentUser": true
}
}
}
}
}
],
"timestamp": "2000-01-01T00:00:0.000Z"
},
],
"nextPageToken": "###"
}
如果这不是你想要的,我道歉。