【发布时间】:2013-04-17 15:59:14
【问题描述】:
我们的应用程序需要用户文件和文件夹的完整列表。我们通过Javascript 库使用files.list()(与官方API reference 中显示的代码基本相同)。
我们使用“drive.files”范围。
检查对列表的响应,我们发现某些文件总是丢失。我做了各种测试来理解这个问题:
- 文件明显存在。它们出现在
Google Drive Webapp中,如果我通过 ID 明确请求它们,我可以通过 API 毫无问题地获取它们。 - 它是可重现的,总是丢失相同的文件。
- 这不是暂时的。一天后我尝试了,但仍然缺少相同的文件。我知道 API 中有一些奇怪的效果会在一段时间后消失,但不是这个。
- 这不是一次性的(例如,在上传过程中出现了一些奇怪的问题)。如果我再次使用完全不同的 Google 帐户重复文件丢失。在一个测试中的一小部分 147 个上传文件中,有 4 个被
files.list调用丢失,在另一个帐户上的相同 147 个文件的另一个测试中,有 23 个文件丢失。 - 仅当我使用
drive.files范围时才会出现这种情况。如果我将范围放宽到drive,所有文件都会返回。如果查看 Google Drive Webapp 中的“详细信息”,那么丢失的文件也会显示为我们的应用程序创建的。所以他们似乎并没有不知何故失去了起源。 - 当我指定搜索查询时也会发生这种情况。如果我使用搜索词“q: modifiedDate > '2012-06-04T12:00:00'”调用 files.list,它也应该返回所有文件,那么相同的文件会丢失。
- 我重新实现了与 API 的纯 REST 调用相同的事情,以排除这是 Javascript 库的问题。错误仍然存在。
更新:我可以将其归结为分页和 maxResults 参数的问题。如果我使用不同的值,API 会返回不同数量的项目:
maxResults=100 我得到 100+100+7=207。
maxResults=99 我得到 99+99+28=226。
maxResults=101 我得到 101+101+0=202。
最后一个结果很有趣,它给了我一个nextLink,表示还有更多结果,但最后一个响应中的 items 数组实际上是空的。仅此一项就可能表明存在错误。
不过,这只发生在 drive.file 范围内,计数在整个 drive 范围内是一致的。
我很高兴听到有关解决方法的想法。我知道跟踪用户文件的其他方法,例如使用更改提要。我已经在使用它,但对于我们应用程序中的特定部分,我只需要用户帐户中所有应用程序项目的可靠且完整的列表。
另一个注意事项:我们之前在“drive.files”范围内遇到过其他问题(请参阅Listing files with search query returns out-of-scope results (drive.files.list call, using drive.files scope))。事实证明这是一个简单的解决方法。也许这个问题是相关的。
【问题讨论】:
-
听起来像一个错误,我们正在研究它。
-
@BurcuDogan 有什么更新吗?有没有我可以不时查看的更改页面,看看是否已修复?
-
这个问题有更新吗?在扩展我们的应用程序的 Google Drive 集成时,我们反复遇到这个文件列表不可靠的问题。
-
仅供参考,带有下一个链接的空白页面是正常的,您应该使用下一个链接的存在,而不是结果大小,作为有更多结果要获取的指标。
-
@SteveBazyl 我明白这一点,这正是我正在做的。这只是一个旁注,奇怪的是有一个下一个链接但是当我真正得到这个页面时它是空的。这本身不会是问题。问题是,即使我关注所有下一个链接并收集所有结果,它也很难完成。根据 maxResults 参数,缺少不同的文件。真的没有人看到吗?我们有一个解决方法,将所有文件 ID 保存在我们的数据库中,并一个接一个地获取丢失的文件 ID。但这是我们代码中的数百个额外请求和大量开销。
标签: google-drive-api