如何在 GDrive v3 中列出快捷方式文件夹中的文件

Posted

技术标签:

【中文标题】如何在 GDrive v3 中列出快捷方式文件夹中的文件【英文标题】:How to list files in shortcut folder in GDrive v3 【发布时间】:2021-01-21 07:22:49 【问题描述】:

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

【问题讨论】:

文件夹的 mimetype 是 application/vnd.google-apps.folder 【参考方案1】:

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

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

    具有 MIME 类型“快捷方式”的一种 - 这是快捷方式。 具有 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"
 

shortcutDetails 内是targetId

之后,您可以使用正确的"ID" in parents 编写您的原始请求。

参考

Create a shortcut with Drive API

【讨论】:

我以为我试过了,但没用。我又试了一次,一切都很好。有没有办法只带回 shortcutDetails 与整个有效载荷,因为它很大。 fields=* 有没有办法带回几个字段?我需要与排除此参数时获得的字段相同的字段加上 shortcutDetails。这可能吗? 是的,有可能,请参阅this。【参考方案2】:

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

【讨论】:

以上是关于如何在 GDrive v3 中列出快捷方式文件夹中的文件的主要内容,如果未能解决你的问题,请参考以下文章

在 gdrive 上更改文件后无法立即获取最新版本

如何删除具有特定扩展名的所有文件

如何在分页和使用 order by 时列出 Google Drive API v3 上的所有根文件夹和共享?

运行保存在 gdrive 上的 python 脚本

如何删除Google驱动器中具有特定扩展名的所有文件

如何从 google colab 的压缩文件夹中读取/导入训练和测试图像以进行多分类? gdrive 已安装到 gcolab