遍历Google Drive文件时出现insufficientFilePermissions错误如何解决
Google Drive API
insufficientFilePermissions 错误排查与解决方法 核心问题根源
你遇到的403权限错误主要由SCOPES配置冲突、查询参数缺失、无权限访问文件敏感配置三类问题导致,对应解决方案如下:
1. 修复SCOPES冗余冲突问题
你当前配置的SCOPES存在大量重叠权限,Google OAuth授权时会默认取权限集合的最小交集,你配置的drive.readonly、drive.metadata.readonly等只读权限会覆盖最高权限的drive全量权限,导致你没有资格查看文件的权限配置。
正确的SCOPES只需保留最高权限即可,如果你需要遍历所有文件并查看权限,仅保留以下配置:
SCOPES = ['https://www.googleapis.com/auth/drive']
注意:修改SCOPES后必须删除本地旧的token.json文件,重新走授权流程生成新的token文件,否则修改的SCOPES不会生效
2. 补全文件列表查询的全量适配参数
默认的service.files().list()仅返回你个人创建、或明确共享到你个人账号下的文件,共享盘文件、仅拥有查看权限的公共文件不会返回完整元数据,需要新增两个适配全量文件的参数:
files = service.files().list( fields='files(id, name, capabilities)', includeItemsFromAllDrives=True, supportsAllDrives=True ).execute().get('files', [])
3. 新增权限预校验逻辑,跳过无权限文件
不是所有你能看到的文件都支持查看权限配置,比如公共只读共享文件、你仅拥有浏览权限的共享盘文件,都没有查看权限列表的资格,需要先判断文件的canReadPermissions属性再调用接口,避免无意义报错:
for file in files: # 预校验是否有权限读取该文件的权限配置 if file.get('capabilities', {}).get('canReadPermissions', False): try: perms = service.permissions().list( fileId=file['id'], supportsAllDrives=True ).execute() print(perms) except Exception as e: print(f"文件{file['id']}获取权限失败: {str(e)}") else: print(f"无权限查看文件{file.get('name', '未命名')}({file['id']})的权限配置")
4. 修正无效排查逻辑的问题
你之前写的requests.get测试代码存在两个错误,测试结果不具备参考性:
- 字符串拼接错误,没有把动态的
file['id']拼接到请求URL中 - 没有在请求头中携带
Authorization: Bearer {你的access_token}参数,直接访问接口必然返回401登录要求
额外排查点
如果你使用的是服务账号授权而非个人账号授权,需要提前将需要访问的文件/共享盘的查看权限授予服务账号的邮箱地址,否则就算SCOPES配置正确也会返回403权限错误。
内容的提问来源于stack exchange,提问作者I.T. G.
相关产品推荐
相关产品推荐

