如何在GDrive v3的快捷方式文件夹中列出文件 云端硬盘中的快捷方式项的属性为实际文件夹的ID请求响应参考

问题描述

我正在尝试使用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": []
}

我使用的端点错误吗?我还需要向API请求添加其他内容吗?

解决方法

云端硬盘中的快捷方式项的属性为实际文件夹的ID。

例如,如果发出请求时,您在云端硬盘中的文件夹只有一个快捷方式,则在根目录中列出所有文件时都会得到两个结果

  1. 一个哑剧类型为“ shortcut”的快捷方式。
  2. 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查找文件。