Google Colab下载Google Drive特定版本文件遇OAuth及API问题求助
解决Google Colab下载Drive文件特定版本的问题
一、修复OAuth 2.0重定向不匹配问题
Colab是云端环境,run_local_server依赖本地端口的逻辑不适用,直接改用控制台授权模式绕开重定向限制:
from google_auth_oauthlib.flow import InstalledAppFlow from googleapiclient.discovery import build # 只请求只读权限,最小化权限范围 SCOPES = ['https://www.googleapis.com/auth/drive.readonly'] flow = InstalledAppFlow.from_client_secrets_file('client_secrets.json', SCOPES) # 用控制台模式替代本地服务器 credentials = flow.run_console() drive_service = build('drive', 'v3', credentials=credentials)
运行后会输出一个授权URL,复制到浏览器打开,登录账号后拿到授权码,粘贴回Colab控制台即可完成认证,完全规避重定向URI的问题。
如果一定要用本地重定向,必须确保:
- OAuth客户端类型是桌面应用(不是Web应用)
- 在OAuth客户端设置里精确添加
http://localhost:8081/(注意末尾斜杠要和请求一致)
二、正确调用Drive API下载特定版本
之前的file not found基本是参数使用错误,按以下步骤操作:
- 先通过文件ID获取所有版本列表,筛选出目标版本ID
- 下载时指定原文件ID和目标版本ID
完整代码示例:
file_id = '你的原文件ID' # 从Drive文件URL中提取,格式如1ABCDEFGhijkLmnopQrstuvwxyz # 获取文件所有版本 revisions = drive_service.revisions().list(fileId=file_id).execute() # 筛选目标版本(可按修改时间、版本号自定义条件) target_rev_id = None for rev in revisions['revisions']: # 示例:筛选2024年5月20日修改的版本 if '2024-05-20' in rev['modifiedTime']: target_rev_id = rev['id'] break # 下载目标版本到工作区 if target_rev_id: request = drive_service.files().get_media(fileId=file_id, revisionId=target_rev_id) with open('下载后的文件名', 'wb') as f: f.write(request.execute()) else: print("未找到匹配的目标版本")
三、无API替代方案:挂载Drive+临时版本恢复
不需要写复杂代码,通过网页版配合Colab挂载实现:
- 挂载Google Drive到Colab:
from google.colab import drive drive.mount('/content/drive') - 打开Drive网页版,找到目标文件→右键→管理版本,选中要下载的版本点击恢复
- 在Colab中复制恢复后的文件到工作区:
cp /content/drive/MyDrive/文件路径/原文件名 /content/本地保存名 - 回到Drive网页版的版本管理界面,恢复回原来的最新版本即可
四、file not found问题排查要点
- 确认文件ID正确:是Drive URL中
https://drive.google.com/file/d/[文件ID]/view的中间部分 - 确认授权Scope包含
drive.readonly或drive(如果涉及版本修改) - 检查目标版本是否已过期:Drive普通版本保留30天,企业版可能延长,过期版本会被永久删除
内容的提问来源于stack exchange,提问作者Melih
相关产品推荐
相关产品推荐

