Google drive api files.list()以重复方式返回“中的不完整列表”;drive.files";范围

Google drive api files.list()以重复方式返回“中的不完整列表”;drive.files";范围,google-drive-api,Google Drive Api,我们的应用程序需要用户文件和文件夹的完整列表。我们通过Javascript库使用files.list() 我们使用“drive.files”范围 检查对列表的响应,我们发现一些文件总是丢失。我做了各种测试来了解问题: 这些文件显然存在。它们出现在googledrivewebapp中,如果我通过ID明确请求它们,我可以通过API毫无问题地获取它们 它是可复制的,总是丢失相同的文件 这不是暂时的。我试了一天后,仍然是相同的文件丢失。我知道API中有一些奇怪的效果会在一段时间后消失,但这次没有 这不

我们的应用程序需要用户文件和文件夹的完整列表。我们通过
Javascript
库使用
files.list()

我们使用“
drive.files
”范围

检查对列表的响应,我们发现一些文件总是丢失。我做了各种测试来了解问题:

  • 这些文件显然存在。它们出现在
    googledrivewebapp
    中,如果我通过ID明确请求它们,我可以通过API毫无问题地获取它们
  • 它是可复制的,总是丢失相同的文件
  • 这不是暂时的。我试了一天后,仍然是相同的文件丢失。我知道API中有一些奇怪的效果会在一段时间后消失,但这次没有
  • 这不是一次性的事情(例如,上传过程中出现了一些奇怪的问题)。如果我再次使用完全不同的Google帐户重复,文件将丢失。在一个测试中,147个上传的文件中有4个被
    文件丢失。list
    调用丢失,在另一个测试中,另一个帐户上有相同的147个文件,有23个文件丢失
  • 它仅在我使用
    驱动器.files
    作用域时发生。如果我将作用域放宽到
    驱动器
    ,则返回所有文件。如果查看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数组实际上是空的。仅此一项就可能表明存在错误

不过,这只发生在
驱动器.file
范围内,计数在整个
驱动器
范围内是一致的

我很高兴听到解决办法的想法。我知道跟踪用户文件的其他方法,例如使用changes提要。我已经在使用它了,但对于应用程序中的特定部分,我只需要一个用户帐户中所有应用程序项的可靠和完整列表


还有一点需要注意:我们以前在“drive.files”作用域中遇到过其他问题(请参阅)。结果证明这是一个很容易解决的问题。也许这个问题是相关的

属于“共享给我”的文件和属于自己的文件/文件夹有什么区别吗?这是我的问题吗? 它在Google Drive中的显示方式与我在没有正确标志的情况下搜索时得到的结果不同

当我在所有文件夹中列出这个文件列表时,我发现我确实必须包含文件搜索范围的位置。 -包括已删除的文件
-“包含共享给我的文件”

听起来像个bug,我们正在研究它。@BurcuDogan有什么更新吗?是否有一个更改页面,我可以不时检查,看看这是否是固定的?是否有任何关于这个问题的更新?在扩展应用程序的Google Drive集成时,我们反复遇到不可靠的文件列表问题。仅供参考,带有下一个链接的空白页面是正常的,您应该使用下一个链接的存在,而不是结果大小,“作为一个指标,还有更多的结果要获取。@SteveBazyl我理解这一点,这正是我正在做的。这只是一个旁注,奇怪的是有下一个链接,但当我真正得到这个页面时,它是空的。这本身不是问题。问题是,即使我遵循所有后续链接并收集所有结果,它也很难完成。根据maxResults参数,缺少不同的文件。真的没有其他人看到吗?我们有一个变通方法,将所有文件ID保留在数据库中,并逐个提取丢失的文件ID。但在我们的代码中有数百个额外的请求和大量的开销。