使用 Google API 列表从共享子文件夹获取文件列表

Aquiring a file list from a shared sub folder using the Google API list

在编写 java 代码之前,我试图了解 GoogleAPI 的工作原理。
我正在尝试从共享驱动器的子目录中获取文件列表,
如果我使用高级共享文件夹中的文件 ID,我可以获得包括子文件夹在内的所有文件的列表。
每次我尝试只获取子文件夹中的文件时,我都会得到

{
 "domain": "global",
 "reason": "notFound",
 "message": "Shared drive not found: 1S_4HV0vi3zPr-gt2lRTCp5hAJFooElCn",
 "locationType": "parameter",
 "location": "driveId"  
} 

我正在使用网站 https://developers.google.com/drive/api/v3/reference/files/list 使用以下参数

Corpra = drive
deriveid
includeItemsFromAllDrives=true
pagesize=250
SupportsAllDrive=true

这是我从中获取子文件夹 ID 的高级共享驱动器的部分输出

{
 "kind": "drive#file",
 "id": "1S_4HV0vi3zPr-gt2lRTCp5hAJFooElCn",
 "name": "2021",
 "mimeType": "application/vnd.google-apps.folder",
 "teamDriveId": "0ACNyBdDB5wLXUk9PVA",
 "driveId": "0ACNyBdDB5wLXUk9PVA"
},

我做错了什么???

您不能使用 Files.list() 中的共享驱动器子目录文件夹 ID。 此方法需要 driveId,这是要搜索的共享驱动器的 ID。

您可以使用Drives.list()获取有效用户共享驱动器列表

如果你想列出子目录文件夹中的文件,你需要添加一个查询参数来指示文件的父文件夹id。参见 Search for files and folders

注:

部分文件资源字段默认不显示在响应正文中,如果要显示所有字段,请在Files.list()中设置fields参数至 *


例如:

我的共享驱动器子文件夹 ID:“1V2bi9xN8aWDWzCvMWC4oCqmOGHh1xxxx”

如果我想列出这个子文件夹下的所有文件,我需要包含这个查询参数:'1V2bi9xN8aWDWzCvMWC4oCqmOGHh1xxxx' in parents


您的请求参数将为:

Corpra = drive
deriveid
includeItemsFromAllDrives=true
pagesize=250
SupportsAllDrive=true
q = 'shared drive sub-folder id' in parents

响应示例:

{
 "kind": "drive#fileList",
 "incompleteSearch": false,
 "files": [
  {
   "kind": "drive#file",
   "id": "1_XlY8tgcJgj13FItftGrF77ixxxxx",
   "name": "subfolder_doc",
   "mimeType": "application/vnd.google-apps.document",
   "teamDriveId": "0AJWF4SKro9kyxxxx",
   "driveId": "0AJWF4SKro9kyUxxxx"
  }
 ]
}

(更新)

这是 java 中使用 Drive.Files.List() methods

的示例请求
FileList result = service.files().list()
                .setCorpora('drive')
                .setDriveId('0ACNyBdDB5wLXUk9xxxx')
                .setPageSize(250)
                .setIncludeItemsFromAllDrives(true)
                .setSupportsAllDrives(true)
                .setQ("'1-mZjjMTrcmlNm6SnJQeSQxGxxxxx' in parents") 
                .execute();