如何在分页和使用 order by 时列出 Google Drive API v3 上的所有根文件夹和共享?
Posted
技术标签:
【中文标题】如何在分页和使用 order by 时列出 Google Drive API v3 上的所有根文件夹和共享?【英文标题】:How to list all root folder and shares on the Google Drive API v3 while paging and using order by? 【发布时间】:2021-03-06 14:43:03 【问题描述】:我已经看到了一些关于此的问题,但没有一个涵盖我的场景。
基本上我想要的是使用令牌进行分页并列出根文件夹中的所有文件夹和文件,包括共享文件和文件夹。
这似乎可以正常工作,但是一旦我添加了orderBy
,它就不能正常工作了。如果我删除or sharedWithMe = true
,它可以进行排序,但是一旦我添加它,就像共享项目没有排序一样。
我做错了什么?
这是我的代码(Kotlin 和 android):
val response =
gDriveClient.files()
.list()
.setSpaces("drive")
.setCorpora("user")
.setFields("files(id, name, size, modifiedTime, mimeType, parents, quotaBytesUsed),nextPageToken")
.setQ("('root' in parents or sharedWithMe = true) and trashed = false")
.setOrderBy("folder,name")
.setPageSize(params.loadSize)
.setPageToken(token)
【问题讨论】:
所以你想基本上检索所有文件夹,包括共享驱动器中的文件夹,然后按名称排序,对吗?当使用sharedWithMe = true
列出它们时,你会得到什么行为(即你得到无序的文件夹、最后的共享文件夹等)?
不只是文件夹,我还想列出根文件夹和共享内容中的文件。我还没有找到模式,当我使用sharedWithMe = true
时,文件和文件夹只是感觉混合在一起,而且不仅仅是共享的混合在一起,我自己的文件也混合在它们之间,但是如果我使用folder
在orderBy
之外,文件没有混合,我首先共享,然后是我的,但是name
的顺序仍然是错误的。如果我选择root in parents
,那么它似乎已排序。所以我认为这是两者的混合,但分批,我会从共享中获取一些,然后再共享一些我的,依此类推。
【参考方案1】:
不幸的是,您遇到的行为似乎是一个错误,因为您的查询和请求格式正确,并且对于获得您正在寻找的内容是必要的。我在这里报告了这种行为:https://issuetracker.google.com/issues/174476354。请考虑为报告加星标,以表明这也对您产生了影响。
解决方法
对此的一种可能的解决方法是在请求执行后对您的响应进行排序和过滤,不幸的是,这不会让您为您的特定目的执行分页请求(至于订购您需要所有文件的所有内容)。
参考文献
Drive.Files.list()
Query parameter sharedWithMe
【讨论】:
谢谢,我认为这可以解决它,但是当我查看时,我看不到setSupportsAllDrives
作为一种方法。你有什么版本的他们的api? Android Studio 显示我有google-api-services-drive-v3-rev136-1.25.0
。
找到 v3-rev197-1.25.0
并且似乎有它。但是我仍然没有看到与root in parents
共享的文件,如果我把它拿出来,我会看到大量的文件和文件夹。我猜它到处都是?
只是为了清楚。如果我使用您发布的代码,我会看到大量文件,我的猜测是它是每个驱动器上的每个文件。如果我使用root in parents
,那么我只会看到那些以root
作为父级的人,这意味着我看不到任何共享的东西。一些共享项目似乎有父项,但其中很多没有。
嗨!是的,所以在进一步查看后,我意识到为了满足您的条件,您的方法更好。但是,我意识到sharedWithMe
搞砸了订单这一事实并不是预期的行为,因此我已向 Google 报告了这一点。检查报告here 并考虑为其加星标以表明此行为也在影响您。您是否会考虑在请求完成后而不是在请求中对文件进行排序的解决方法?
感谢您提交该文件。由于这个问题,我计划在发出请求后对自己进行排序(就像我对 Dropbox 所做的那样),但这意味着我将无法使用分页。以上是关于如何在分页和使用 order by 时列出 Google Drive API v3 上的所有根文件夹和共享?的主要内容,如果未能解决你的问题,请参考以下文章
MySQL分页时使用 limit+order by 会出现数据重复问题