求助:Google Drive Node.js 大文件可恢复上传实现方案
Google Drive 可恢复上传实现方案(解决大于5MB文件上传问题)
我之前也遇到过完全一样的问题!Google Drive v3的基础drive.files.create接口确实对文件大小做了5MB的限制,超过这个阈值必须切换到可恢复上传流程,官方文档虽然明确了规则但确实缺了实用的示例代码。我整理了一套可直接复用的实现方案,用Python为例,你可以参考:
核心流程说明
可恢复上传分为两个关键步骤:
- 先创建一个上传会话,获取专属的上传URL
- 将大文件分成固定大小的块,逐个上传到这个URL,支持断点续传
1. 创建可恢复上传会话
这一步需要发送POST请求到Google Drive的可恢复上传端点,带上你的认证凭据和文件元数据(名称、MIME类型等),成功后会返回一个上传会话URL,后续分块上传都要用这个URL。
import requests from google.oauth2.credentials import Credentials # 从本地加载已有的认证凭据(你小文件能正常上传,说明这个环节没问题) creds = Credentials.from_authorized_user_file('token.json') headers = { 'Authorization': f'Bearer {creds.token}', 'Content-Type': 'application/json' } # 定义你要上传的文件元数据 file_metadata = { 'name': '你的大文件名.pdf', 'mimeType': 'application/pdf' # 根据你的文件类型调整 } # 发送请求创建上传会话 response = requests.post( 'https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable', headers=headers, json=file_metadata ) # 提取上传会话URL,后续分块上传依赖这个地址 upload_url = response.headers.get('Location') if not upload_url: raise Exception('创建上传会话失败,请检查认证和元数据格式')
2. 分块上传文件内容
将大文件分成5MB左右的块(最小不能小于256KB),逐个发送PUT请求到刚才获取的上传URL,通过Content-Range头告知服务器当前块的字节范围。如果上传中断,还可以复用这个URL从断点位置继续上传。
import os file_path = '本地大文件的路径' file_size = os.path.getsize(file_path) chunk_size = 5 * 1024 * 1024 # 5MB每块,可根据网络情况调整 with open(file_path, 'rb') as f: start_byte = 0 while start_byte < file_size: # 计算当前块的结束字节(注意是闭区间) end_byte = min(start_byte + chunk_size, file_size) - 1 headers = { 'Content-Range': f'bytes {start_byte}-{end_byte}/{file_size}' } # 读取当前块的内容 chunk_data = f.read(chunk_size) # 发送PUT请求上传块 response = requests.put( upload_url, headers=headers, data=chunk_data ) # 处理服务器响应 if response.status_code == 200: print('✅ 文件上传完成!') print('文件详情:', response.json()) break elif response.status_code == 308: # 服务器返回需要继续上传,获取已上传的最后字节位置 range_header = response.headers.get('Range') if range_header: start_byte = int(range_header.split('-')[1]) + 1 else: start_byte = end_byte + 1 print(f'🔄 继续上传,起始位置:{start_byte}') else: raise Exception(f'❌ 上传失败,状态码:{response.status_code},响应内容:{response.text}')
一些关键注意事项
- 块大小可以调整,但不要小于256KB,否则可能被服务器拒绝
- 如果上传中途中断,不需要重新创建会话,直接复用之前的
upload_url即可,服务器会自动返回已上传的范围 - 确保你的认证凭据拥有
https://www.googleapis.com/auth/drive的权限(如果是上传到共享驱动器,还需要额外的团队盘权限) - 测试时可以先用6MB左右的文件验证流程,确认没问题再上传更大的文件
内容的提问来源于stack exchange,提问作者LILBRICK1337
相关产品推荐
相关产品推荐

