Google 驱动器 API v3:service.files().list 未返回所有文件夹

Google Drive API v3: service.files().list not returning all folders

我正在根据 Google Team Drive 文件的内容实现基于树的查看器;为了做到这一点,我遵循这里给出的建议:,即进行 2 次 API 调用 - 一次获取所有文件夹,另一个获取所有直接子文件这些文件夹。

但是,我注意到获取所有文件夹的调用并没有返回所有文件夹:


res = service.files().list(
corpora='teamDrive',
pageSize=1000,
supportsTeamDrives=True,
includeTeamDriveItems=True,
teamDriveId=TEAM_DRIVE_ID,
fields='files(id,parents,name,mimeType)',
q="mimeType='application/vnd.google-apps.folder' and trashed=false"
).execute()

len(res['files'])
# 460

此处,文件不应超过 pageSize,但我肯定从这个结果中遗漏了大量文件夹,例如一个特定的 ID 为 specified_id:


len([x for x in res['files'] if x['id'] == specified_id])
# 0

我认为这不是权限问题,因为我可以正常获取此文件:


specific_file = service.files().get(
    fileId=specified_id,
    supportsTeamDrives=True,
).execute()

specific_file

{'id': '...',
 'kind': 'drive#file',
 'mimeType': 'application/vnd.google-apps.folder',
 'name': '...',
 'teamDriveId': '...'}

为了实现在一次 API 请求中获取 Google(团队)驱动器中的所有文件夹的目标,我们将不胜感激。

您的代码中存在错误。您的代码假定如果您有(比如说)500 个文件夹,那么通过给出 pageSize=1000,所有 500 个文件夹将包含在一个 list.execute 中。 云端硬盘不是这样工作的。

pageSize 只是一个最大值,因此最多 将包含 1000 个文件夹。 API 不保证包含最多 1000 个文件夹。您需要在请求中迭代 list.execute include pageToken,直到 nextPageToken==null.