1

我正在尝试使用 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 请求添加其他内容吗?

4

2 回答 2

1

您云端硬盘中的快捷方式项目具有一个带有实际文件夹 ID 的属性。

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

  1. 一种具有 MIME 类型的“快捷方式” - 这是快捷方式。
  2. 一个具有 mime 类型“文件夹”的 - 似乎 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"
 }
}

里面shortcutDetailstargetId.

之后,您可以使用正确的"ID" in parents.

参考

于 2020-10-06T15:42:34.610 回答
0

快捷方式与其指向的目录不同。您将需要发出两个请求,一个是从快捷方式获取目标 ID(“targetId”),然后是第二个调用以查找带有targetId in parents.

于 2020-10-06T14:52:40.550 回答