Google Drive API通过Python可下载手动复制ID的文件,无法列出指定文件夹文件ID
问题原因
- Google Drive API 的
files.list()方法默认仅查询当前认证账号私人驱动器内的文件,其他账号共享给你的文件夹内容默认不会被纳入查询范围,即使你已经拥有该文件夹内文件的访问权限。 - 你的调用代码缺少两个必填的跨驱动器查询参数:
supportsAllDrives=True和includeItemsFromAllDrives=True,无法识别非当前账号私人驱动器下的共享内容。 - 授权配置异常:朋友仅给你的服务账号授予了文件夹内单个文件的访问权限,未开放文件夹本身的列表权限,也会导致可以下载单个文件但无法拉取文件列表。
可行解决方案
方案1:补充API查询参数
修改listFiles函数中的API调用逻辑,补充跨驱动器查询参数,修改后的代码如下,90%以上的同类问题都可以通过这个修改解决:
fileIDList = [] fileNameList = [] def listFiles(folderID): files_list = service.files().list( q=" '{0}' in parents and trashed=false ".format(folderID), # 新增以下两个参数 supportsAllDrives=True, includeItemsFromAllDrives=True ).execute() file_get = files_list.get('files', []) print('file_get: ', file_get) fileCounter = 0 for file in file_get: fileIDList.append(file['id']) fileNameList.append(file['name']) print('file ' + str(fileCounter) + ': ' + file['name'] + ' • ' + file['id']) fileCounter += 1
方案2:检查文件夹授权配置
如果修改参数后仍返回空列表,让朋友检查共享文件夹的授权配置:
- 确认授权对象是你的服务账号邮箱,而非你个人谷歌账号邮箱
- 确认给服务账号授予的权限等级为「查看者」及以上,且开放了文件夹的列表访问权限,不要只给单个文件单独授权。
方案3:适配共享驱动器场景
如果该文件夹属于企业/组织的共享驱动器,需要额外补充两个参数:
files_list = service.files().list( q=" '{0}' in parents and trashed=false ".format(folderID), supportsAllDrives=True, includeItemsFromAllDrives=True, # 新增共享驱动器相关参数 corpora='drive', driveId='共享驱动器的ID' ).execute()
内容的提问来源于stack exchange,提问作者ZwiTrader
相关产品推荐
相关产品推荐

