Google Drive API技术问询:无法构造查询自有文件夹的合法查询字符串
解决Google Drive API查询个人文件夹的语法问题
看起来你在Drive API的文件查询上踩了几个常见的语法坑,我来帮你梳理下正确的用法,直接解决你的问题:
1. 为什么ownedByMe相关查询报400错误?
ownedByMe不是可以放在q查询字符串里用=比较的字段,它是Files.list接口的独立布尔参数。你有两种正确的方式查询自己拥有的文件夹:
- 方式一:拆分参数
调用接口时,除了q=mimeType='application/vnd.google-apps.folder',额外传递ownedByMe=true作为单独的请求参数(不要塞进q里)。 - 方式二:在
q里用owners字段
如果一定要把所有条件写在q中,用'me' in owners来表示当前用户是所有者,组合后的查询字符串是:mimeType = 'application/vnd.google-apps.folder' and 'me' in owners
2. 如何正确查询“未被他人共享给自己”的文件夹?
你尝试的sharedWithMe=false等语法报错,原因和上面一样——sharedWithMe也是独立的布尔参数,不能直接在q里做比较。要筛选出仅个人的文件夹(自己拥有且未被他人共享),推荐两种方式:
- 方式一:用参数组合(最简洁)
同时传递三个参数:q: mimeType = 'application/vnd.google-apps.folder'ownedByMe: truesharedWithMe: false
这个方式最准确,因为sharedWithMe=false的定义就是“排除所有他人共享给当前用户的文件”,不会影响你自己共享出去的文件。
- 方式二:在
q里手动排除共享情况
如果必须写在q中,可以通过排除自己作为读者/编辑者的情况(注意:这个会排除你自己共享出去的文件,因为你自己也是读者):mimeType = 'application/vnd.google-apps.folder' and 'me' in owners and not 'me' in readers and not 'me' in writers
3. 为什么sharedWithMe不能加入结果集?
sharedWithMe是API动态计算的状态,不属于文件的固有属性,所以不在可返回的字段列表里。如果需要判断一个文件是否是他人共享给你的,可以通过检查owners字段不包含你,同时readers或writers包含你。
最终推荐方案
如果你要的是仅自己拥有、未被他人共享的个人文件夹,直接用参数组合的方式最稳妥,既不会有语法错误,结果也完全符合预期。
内容的提问来源于stack exchange,提问作者ZorgoZ
相关产品推荐
相关产品推荐

