问题描述
我正在尝试使用GDrive API v3列出快捷方式文件夹中的所有文件和文件夹。
使用API时,我可以使用以下请求列出所有文件:
curl \
'https://www.googleapis.com/drive/v3/files?q=%27root%27%20in%20parents&supportsAllDrives=true&supportsTeamDrives=true&key=[YOUR_API_KEY]' \
--header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \
--header 'Accept: application/json' \
--compressed
哪个返回类似:
{
"kind": "drive#file","id": "xxxxxxxxxxxxxx","name": "Name of file here","mimeType": "application/vnd.google-apps.shortcut"
}
当我获取该ID并将其用于上述相同请求中时,该请求适用于"mimeType": "application/vnd.google-apps.folder"
。我得到一个空的有效载荷:
{
"kind": "drive#fileList","incompleteSearch": false,"files": []
}
解决方法
云端硬盘中的快捷方式项的属性为实际文件夹的ID。
例如,如果发出请求时,您在云端硬盘中的文件夹只有一个快捷方式,则在根目录中列出所有文件时都会得到两个结果。
- 一个哑剧类型为“ shortcut”的快捷方式。
- MIME类型为“ folder”的用户-似乎API仍会列出该内容。
如果出于任何原因仅获得快捷方式,则可以获取快捷方式的详细信息:
请求
curl \
'https://www.googleapis.com/drive/v3/files/[YOUR_SHORTCUT_ID]?fields=*&key=[YOUR_API_KEY]' \
--header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \
--header 'Accept: application/json' \
--compressed
响应
(我从响应中删除了大多数字段)
{
"kind": "drive#file","id": "[YOUR_SHORTCUT_ID]","name": "[YOUR_SHORTCUT_NAME]","mimeType": "application/vnd.google-apps.shortcut","starred": false,"trashed": false,"shortcutDetails": {
"targetId": "[THE_ACTUAL_FOLDER_ID]","targetMimeType": "application/vnd.google-apps.folder"
}
}
在shortcutDetails
中是targetId
。
之后,您可以使用适当的"ID" in parents
编写原始请求。
参考
,该快捷方式与其指向的目录不是同义词。您将需要发出两个请求,一个请求从快捷方式获取目标ID(“ targetId”),然后另一个请求以targetId in parents
查找文件。