Google Drive API v2无法下载部分xlsx、pdf文件 报400 Bad Request错误
Google Drive API V2 部分文件下载400 Bad Request 修复方案
- 先排查文件属性问题
- 确认报错文件是否为谷歌Workspace原生格式(文档、表格、幻灯片、表单等),这类文件没有直接的下载地址,用普通文件下载接口请求会直接返回400错误,需要调用
files.export接口指定导出格式(比如docx、xlsx、pdf等)后再下载。 - 确认报错文件是否存放在共享盘内,Drive API V2默认不支持共享盘文件请求,必须额外加参数才能正常请求共享盘资源。
- 确认API使用的账号对目标文件有至少只读权限,V2版本存在权限不足时返回400而非标准403状态码的已知问题。
- 确认报错文件是否为谷歌Workspace原生格式(文档、表格、幻灯片、表单等),这类文件没有直接的下载地址,用普通文件下载接口请求会直接返回400错误,需要调用
- 代码修复方案
- 新增共享盘支持参数,修改SDK调用代码如下:
public InputStream download() throws IOException { return driveService.files() .get(file.getId()) .setSupportsAllDrives(true) .executeMediaAsInputStream(); }
- 新增文件类型判断逻辑,根据文件mimeType区分下载/导出逻辑:
先调用file.getMimeType()获取文件类型,如果是谷歌原生格式,走export接口导出,否则走原有下载逻辑。 - 开启HTTP请求日志打印,获取完整错误信息:默认异常栈仅返回通用Bad Request描述,开启请求日志后可以拿到完整的响应体,里面会标注具体的错误原因,方便精准定位问题。
- 版本兼容建议
Google Drive API V2已经于2021年正式停止维护,官方已经全面迁移到V3版本,V3版本修复了大量V2存在的状态码异常、参数兼容问题,相同下载逻辑在V3版本中不会出现无明确原因的400错误,条件允许的话建议优先升级到V3版本API。
内容的提问来源于stack exchange,提问作者ramvirsingh
相关产品推荐
相关产品推荐

