使用Pydrive2上传109MB文件至Google Drive时遇400错误求助
解决Pydrive2上传大文件时的400 Bad Request错误
问题分析
上传109MB文件触发的400错误,核心原因是convert=True参数:Google Drive对可转换为原生格式(如Google Docs/Sheets/Slides)的文件有明确大小限制,比如演示文稿类文件最多支持100MB转换,你的文件已超出阈值,因此触发请求报错。
解决方案
方案1:移除自动转换参数(最直接有效)
如果不需要将文件转为Google Drive原生格式,直接去掉convert=True即可:
def upload_file(file_name: str, directory_id: str, drive: GoogleDrive) -> str: """ 上传文件到Google Drive 参数: file_name (str): 要上传的文件名 directory_id (str): 目标目录的ID drive (GoogleDrive): Google Drive实例对象 返回: str: 上传后的文件名 """ file = drive.CreateFile( { "title": file_name, "parents": [{"kind": "drive#fileLink", "id": directory_id}], } ) file.SetContentFile(file_name) # 仅保留支持团队盘的参数,移除convert file.Upload(param={"supportsTeamDrives": True}) return file['title']
方案2:启用分片上传(优化大文件稳定性)
针对100MB以上的文件,建议显式设置分片大小,提升上传成功率:
def upload_file(file_name: str, directory_id: str, drive: GoogleDrive) -> str: """ 上传文件到Google Drive 参数: file_name (str): 要上传的文件名 directory_id (str): 目标目录的ID drive (GoogleDrive): Google Drive实例对象 返回: str: 上传后的文件名 """ file = drive.CreateFile( { "title": file_name, "parents": [{"kind": "drive#fileLink", "id": directory_id}], } ) file.SetContentFile(file_name) # 设置10MB分片大小,可根据网络情况调整 file.ChunkSize = 10 * 1024 * 1024 file.Upload(param={"supportsTeamDrives": True}) return file['title']
方案3:若需转换文件(仅适用于小文件)
如果必须转换为Google原生格式,需确保文件大小符合官方限制:
- 文档类(如docx):最大10MB
- 表格类(如xlsx):最大50MB
- 演示文稿类(如pptx):最大100MB
你的109MB文件已超出演示文稿转换上限,这种情况下只能压缩文件大小,或放弃转换需求。
额外检查项
- 确认目标目录ID是否正确,无效ID也可能触发Bad Request错误
- 检查Google Drive存储空间是否充足
内容的提问来源于stack exchange,提问作者Abdulaziz Ibrahim
相关产品推荐
相关产品推荐

