本指南介绍了 Google Drive API 如何支持多种搜索文件和文件夹的方式。
您可以使用 files 资源中的 list 方法返回云端硬盘用户的全部或部分文件和文件夹。list 方法还可用于检索某些资源方法(例如 get 方法和 update 方法)所需的 fileId。
使用 fields 参数
如果您想指定要在响应中返回的字段,可以使用 files 资源的任何方法设置 fields system 参数。如果您省略 fields 参数,服务器会返回一组特定于相应方法的默认字段。例如,list 方法仅返回每个文件的 kind、id、name、mimeType 和 resourceKey 字段。如需返回其他字段,请参阅返回特定字段。
获取文件
如需获取文件,请对 files 资源使用 get 方法,并提供 fileId 路径参数。如果您不知道文件 ID,可以使用 list 方法列出所有文件。
该方法会以 files 资源实例的形式返回文件。如果您提供 alt=media 查询参数,则响应会在响应正文中包含文件内容。如需下载或导出文件,请参阅下载和导出文件。
如需确认下载已知恶意软件或其他滥用文件的风险,请将 acknowledgeAbuse 查询参数设置为 true。此字段仅在设置了 alt=media 参数且用户是文件所有者或文件所在共享云端硬盘的组织者时适用。
搜索当前用户的“我的云端硬盘”中的所有文件和文件夹
使用不带任何参数的 list 方法可返回所有文件和文件夹。
GET https://www.googleapis.com/drive/v3/files
搜索当前用户的“我的云端硬盘”中的特定文件或文件夹
如需搜索特定的一组文件或文件夹,请使用 list 方法搭配查询字符串 q 字段,通过组合一个或多个搜索字词来过滤要返回的文件。
查询字符串语法包含以下三个部分:
query_term operator values
其中:
query_term是要搜索的查询字词或字段。operator指定搜索字词的条件。values是您要用于过滤搜索结果的具体值。
例如,以下查询字符串通过设置 MIME 类型来过滤搜索结果,使其仅返回文件夹:
q: mimeType = 'application/vnd.google-apps.folder'
如需查看所有文件查询字词,请参阅特定于文件的查询字词。
如需查看可用于构建查询的所有查询运算符,请参阅查询运算符。
查询字符串示例
下表列出了一些基本查询字符串的示例。实际代码因您用于搜索的客户端库而异。
您还必须转义文件名中的特殊字符,以确保查询正常运行。例如,如果文件名同时包含英文撇号 (') 和反斜线 ("\") 字符,请使用反斜线对其进行转义:name
contains 'quinn\'s paper\\essay'。
| 您要查询的内容 | 示例 |
|---|---|
| 名称为“hello”的文件 | name = 'hello' |
| 名称中包含“hello”和“goodbye”字样的文件 | name contains 'hello' and name contains 'goodbye' |
| 名称中不包含“hello”一词的文件 | not name contains 'hello' |
| 包含“important”字样且位于回收站中的文件 | fullText contains 'important' and trashed = true |
| 包含“hello”一词的文件 | fullText contains 'hello' |
| 不含“hello”字样的文件 | not fullText contains 'hello' |
| 包含确切词组“hello world”的文件 | fullText contains '"hello world"' |
| 包含包含“\”字符(例如“\authors”)的查询的文件 | fullText contains '\\authors' |
| 属于文件夹的文件 | mimeType = 'application/vnd.google-apps.folder' |
| 不是文件夹的文件 | mimeType != 'application/vnd.google-apps.folder' |
| 在指定日期之后修改的文件(默认时区为世界协调时间 [UTC]) | modifiedTime > '2012-06-04T12:00:00' |
| 在特定日期之后修改的图片或视频文件 | modifiedTime > '2012-06-04T12:00:00' and (mimeType contains 'image/' or mimeType contains 'video/') |
| 已加星标的文件 | starred = true |
集合中的文件(例如,parents 集合中的文件夹 ID) |
'1234567' in parents |
| 集合中应用数据文件夹中的文件 | 'appDataFolder' in parents |
| 用户“test@example.org”是所有者的文件 | 'test@example.org' in owners |
| 用户“test@example.org”具有写入权限的文件 | 'test@example.org' in writers |
| 群组“group@example.org”的成员具有写入权限的文件 | 'group@example.org' in writers |
| 与授权用户共享且名称中包含“hello”的文件 | sharedWithMe and name contains 'hello' |
| 具有对所有应用可见的自定义文件属性的文件 | properties has { key='mass' and value='1.3kg' } |
| 具有自定义文件属性(仅对请求方应用私有)的文件 | appProperties has { key='additionalID' and value='8e8aceg2af2ge72e78' } |
| 未与任何人或网域共享的文件(仅限不公开的文件,或与特定用户或群组共享的文件) | visibility = 'limited' |
使用客户端库过滤搜索结果
以下代码示例展示了如何使用客户端库将搜索结果过滤为 JPEG 文件的文件名和 ID。此示例使用 mimeType 搜索字词将结果范围缩小到 image/jpeg 类型的文件。它还会将 spaces 设置为 drive,以进一步将搜索范围缩小到 Google 云端硬盘空间。如果 nextPageToken 返回 null,则表示没有更多结果。
Java
Python
Node.js
PHP
搜索具有自定义文件属性的文件
如需搜索具有自定义文件属性的文件,请使用 properties 或 appProperties 搜索查询字词,并指定键和值。例如,如需搜索请求应用专有的自定义文件属性(名称为 additionalID,值为 8e8aceg2af2ge72e78),请执行以下操作:
appProperties has { key='additionalID' and value='8e8aceg2af2ge72e78' }
如需了解详情,请参阅添加自定义文件属性。
搜索具有特定标签或字段值的文件
如需搜索具有特定标签的文件,请使用带有特定标签 ID 的 labels 搜索查询字词。例如:'labels/LABEL_ID' in
labels。如果成功,响应正文将包含应用了相应标签的所有文件实例。
如需搜索不含特定标签 ID 的文件,请执行以下操作:Not
'labels/LABEL_ID' in labels。
您还可以根据特定字段值搜索文件。例如,如需搜索具有文本值的文件,请使用以下语法:labels/LABEL_ID.text_field_id ='TEXT'。
如需了解详情,请参阅搜索具有特定标签或字段值的文件。
搜索语料库
调用 list 方法的搜索默认使用 user 的 corpora。如需搜索其他语料库(例如与 domain 共享的文件),请设置 corpora 参数。
您可以在单个查询中搜索多个语料库,但如果合并后的语料库过大,系统可能会返回不完整的结果。如果响应正文中的 incompleteSearch 为 true,则表示未返回所有文档。如果出现这种情况,您应选择其他语料库(例如 user 或 drive)来缩小查询范围。