gpt4 book ai didi

google-docs - 文件编辑后 Etag 和上次修改日期不会更改

转载 作者:行者123 更新时间:2023-12-01 18:05:16 25 4
gpt4 key购买 nike

在 GoogleDrive 中编辑文档后,LastModified 值有时似乎不会立即更改。看起来该值将在几分钟内更新。

我尝试通过DriveSDK获取文档的Etag,Etag值也出现这种情况。

这种奇怪的行为使我无法实时获取文档状态(是否已修改)。任何建议都将受到高度赞赏。

[示例请求和响应]该请求只是 GoogleDrive ListFiles :https://www.googleapis.com/drive/v2/files

这是响应 JSON 的部分,您可以看到 ModifiedDate 早于 ModifiedByMeDate。

 {
"kind": "drive#fileList",
"etag": "\"3NNCnvnQuji-pODa6SMQ6atlc3M/oKnf21kAcJKTCIycS597xCSR2bk\"",
"selfLink": "https://www.googleapis.com/drive/v2/files",
"items": [
{
"kind": "drive#file",
"id": "1lZjcJIf3Chuu5upFqtiqfTRnRw7*****rFL_tlO8A",
"etag": "\"3NNCnvnQuji-pODa6SMQ6atlc3M/MTM1NDY5MzMyMzQ1Mg\"",
"selfLink": "https://www.googleapis.com/drive/v2/files/1lZjcJIf3Chuu5upFqtiqfTRnRw7wSUjbRurFL_tlO8A",
"alternateLink": "https://docs.google.com/a/*****.com/document/d/1lZjcJIf3Chuu5upFqtiqfTRnRw7wSUjbRurFL_tlO8A/edit",
"embedLink": "https://docs.google.com/a/*****.com/document/d/1lZjcJIf3Chuu5upFqtiqfTRnRw7wSUjbRurFL_tlO8A/preview",
"iconLink": "https://ssl.gstatic.com/docs/doclist/images/icon_11_document_list.png",
"thumbnailLink": "https://docs.google.com/feeds/vt?gd=true&id=1lZjcJIf3Chuu5upFqtiq*****7wSUjbRurFL_tlO8A&v=22&s=AMedNnoAAAAAU*****UK74n3UiIg0L4TY-NwP3EaAU&sz=s220",
"title": "TestFile",
"mimeType": "application/vnd.google-apps.document",
"labels": {
"starred": false,
"hidden": false,
"trashed": false,
"restricted": false,
"viewed": true
},
"createdDate": "2012-07-24T08:14:13.918Z",
"modifiedDate": "2012-12-06T01:49:57.982Z",
"modifiedByMeDate": "2012-12-06T01:49:57.982Z",
"lastViewedByMeDate": "2012-12-06T01:50:06.974Z",
"parents": [
{
"kind": "drive#parentReference",
"id": "0AJ-aGTt-gWksUk9PVA",
"selfLink": "https://www.googleapis.com/drive/v2/files/1lZjcJIf3Chuu5upFqtiqfTRnRw7wSUjbRurFL_tlO8A/parents/0AJ-aGTt-gWksUk9PVA",
"parentLink": "https://www.googleapis.com/drive/v2/files/0AJ-aGTt-gWksUk9PVA",
"isRoot": true
}
],
"exportLinks": {
"application/vnd.openxmlformats-officedocument.wordprocessingml.document": "https://docs.google.com/feeds/download/documents/export/Export?id=1l*****huu5upFqtiqfTRnRw7wSUjbRurFL_tlO8A&exportFormat=docx",
"application/vnd.oasis.opendocument.text": "https://docs.google.com/feeds/download/documents/export/Export?id=1lZjcJIf3Chuu5upF*****SUjbRurFL_tlO8A&exportFormat=odt",
"text/html": "https://docs.google.com/feeds/download/documents/export/Export?id=1lZjcJIf3Chuu5upFqtiqfTRnRw7wSUj*****L_tlO8A&exportFormat=html",
"application/rtf": "https://docs.google.com/feeds/download/documents/export/Export?id=1lZjcJIf3Chuu5upFqtiq*****SUjbRurFL_tlO8A&exportFormat=rtf",
"text/plain": "https://docs.google.com/feeds/download/documents/export/Export?id=1lZjcJIf3Chuu5upFqtiqf*****SUjbRurFL_tlO8A&exportFormat=txt",
"application/pdf": "https://docs.google.com/feeds/download/documents/export/Export?id=1lZjcJIf3C*****fTRnRw7wSUjbRurFL_tlO8A&exportFormat=pdf"
},
"userPermission": {
"kind": "drive#permission",
"etag": "\"3NNCnvnQuji-pODa6SMQ6atlc3M/6LfqbkrWujmUe1WSDkyhTxdIUCc\"",
"id": "me",
"selfLink": "https://www.googleapis.com/drive/v2/files/1lZjcJIf3Chuu5upFqtiqfTRnRw7wSUjbRurFL_tlO8A/permissions/me",
"role": "owner",
"type": "user"
},
"quotaBytesUsed": "0",
"ownerNames": [
"***** *****"
],
"lastModifyingUserName": "***** *****",
"editable": true,
"writersCanShare": true,
"appDataContents": false
},

最佳答案

这并不能回答问题,但我只想评论一下 etagmodifiedDateFile 资源的含义。 File etag 似乎直接对应于 modifiedDate 值。 etag 的第二部分(斜线之后)只是 modifiedDate 的编码。

在文档列表 API 中,除了 updated 属性之外,还有一个名为 app:edited 的属性(似乎与此处的 modifiedDate 相对应) 。这些时间戳的变化方式没有明确记录,但我注意到 app:edited 几乎每次更改都会发生变化(例如,如果我没记错的话,文件的加注星号,甚至是另一个用户的)和 更新更改更加有限(例如内容修改和权限更改)。而前面的etag直接对应于app:edited,这很好,因为app:edited的改变表明确实有改变(有时它会改变太多,例如由不同用户对文件加注星标,因为它并没有真正影响当前用户的元数据)。

我想说的是,我认为 Documents List 的 etag(并且具有 app:edited 属性)比具有 modifiedDate< 的 Drive API 更好仅。后者的问题是您没有可靠的方法来确定 File 资源是否已更改。例如,如果您只想检查 File 资源是否已更改,则可以使用带有 If-None-Match header 的 files.get 方法,并使用etag。但etag并不总是改变,因为modifiedDate并不总是改变。例如,当出现新内容、更改 ACL 或更改描述时,它会发生变化,但不会发生变化,例如,当被丢弃或 parent 发生变化时。比较两种资源时,您无法可靠地确定哪一种资源较新。添加可以设置 modifiedDate 的事实(例如,可以将 modifiedDate 设置为较早的值,甚至是常量值,并且 etag 与它)。 etag 的预期目的已经丢失。在很多情况下,我们不能仅仅依赖更改列表,如果 etag 表现正常,它将对确定发生的更改有巨大帮助。

我的建议是将 etag 的行为恢复为类似于文档列表 API。为了帮助确定哪个资源具有更新的信息,还可以添加回 app:edited 属性(我认为只需记录 etag 的值就足够了,就像官方所说的那样第二部分是时间戳的编码,这样我们就可以相信它总是在增加)。另外,我认为最好只更改内容修改的 modifiedDate 属性,而不做其他任何事情(例如,不更改 ACL 或描述更改)。

同样,逐字文件的 Revision(List) 资源的 etag 也不是很有用。由于 downloadUrl 属性定期更改,因此每个 Revisionetag 和整个列表都会随之更改,使其变得无用(因为您可以'不要用它来检查修订是否没有改变)。好消息是,您可以比较 md5Checksum 属性,但它在某些情况下并不可靠。

关于google-docs - 文件编辑后 Etag 和上次修改日期不会更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13716971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com