Python调用Google Drive API v3上传文件报RedirectMissingLocation错误求助
排查Google Drive API v3上传时的
RedirectMissingLocation错误(非降级方案) 不用急着降级依赖包,咱们可以从几个方向排查这个重定向缺失Location头的问题:
1. 先确认目标资源的有效性与请求参数
- 首先检查你上传的目标文件夹ID是否正确,要是文件夹被移动、改名或者权限变了,Drive API可能返回异常的重定向响应。你可以先跑个小脚本验证文件夹是否能正常访问:
from googleapiclient.discovery import build service = build('drive', 'v3', credentials=creds) try: folder = service.files().get(fileId='你的文件夹ID', fields='id,name').execute() print(f"目标文件夹正常:{folder['name']}(ID:{folder['id']})") except Exception as e: print(f"验证文件夹失败:{str(e)}") - 如果你上传到共享驱动器(Team Drive),别忘了在请求里加上
supportsAllDrives=True参数,缺这个参数很可能会触发异常重定向,比如:request = service.files().create( body=file_metadata, media_body=media, supportsAllDrives=True # 共享驱动器必须加这个 )
2. 排查网络环境的干扰
这个错误很多时候和网络层有关,比如代理、防火墙或者网关可能会修改HTTP响应头,把Location字段弄丢了:
- 试试在没有代理的环境下测试代码,或者检查代理配置是否允许完整传递响应头;
- 用
curl测试一下Drive API的连通性,看看响应头是否正常:
重点看响应里有没有curl -v https://www.googleapis.com/drive/v3/files/rootLocation相关的异常,或者是否有莫名的重定向跳转。
3. 检查上传代码的请求构造
- 确认你用的是正确的
MediaFileUpload构造方式,尤其是断点续传模式(resumable=True)对重定向的处理更敏感,别自己瞎改请求逻辑:from googleapiclient.http import MediaFileUpload media = MediaFileUpload('你的文件路径', resumable=True) request = service.files().create(body=file_metadata, media_body=media) response = None while response is None: status, response = request.next_chunk() if status: print(f"已上传 {int(status.progress() * 100)}%") print("上传完成!") - 如果你自定义了httplib2的Http实例,别乱改默认的重定向处理配置,很可能破坏了正常的头信息解析逻辑。
4. 开启调试日志抓具体请求细节
可以打开httplib2的调试日志,看看到底是哪个请求触发了重定向,以及响应里到底有没有Location头:
import httplib2 import logging logging.basicConfig(level=logging.DEBUG) httplib2.debuglevel = 4
运行代码后,查看日志里的请求URL、响应状态码和响应头,这样能精准定位问题出在哪一步。
5. 检查Google Cloud项目的API配置
- 确认你的Cloud项目里Drive API已经启用,并且配额没超限;
- 检查服务账号或者OAuth 2.0令牌的权限是否足够,有时候权限不足会返回异常重定向而不是明确的错误提示。
内容的提问来源于stack exchange,提问作者sherin
相关产品推荐
相关产品推荐

