You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Google Drive API批量上传文件报ssl.SSLEOFError错误如何解决

问题成因

ssl.SSLEOFError: EOF occurred in violation of protocol 是SSL连接在传输过程中被意外中断抛出的错误,结合你批量上传的场景,常见诱因如下:

  • 短时间内高频次发起上传请求,触发了Google Drive API的速率限制,服务器主动切断超额请求的连接
  • 网络链路不稳定,尤其是访问谷歌服务需要代理转发的场景下,代理链路波动很容易导致SSL连接中途断开
  • 现有代码没有异常重试逻辑,单次连接失败就直接终止,没有故障恢复能力,所以只能成功上传部分文件
解决方法

你可以按照优先级逐一尝试以下方案:

  1. 添加异常重试+指数退避逻辑
    在上传逻辑中捕获SSL相关错误,失败后间隔一段时间重试,避免单次网络波动就导致上传失败,修改后的上传循环代码示例:
import time
from ssl import SSLEOFError

# 原有初始化、获取文件列表、创建目标文件夹的逻辑保持不变,仅修改上传循环
max_retry = 3  # 单个文件最多重试3次
for upload_file in f:
    gfile = drive.CreateFile({'parents': [{'id': a}]})
    gfile.SetContentFile(upload_file)
    is_success = False
    for retry_cnt in range(max_retry):
        try:
            gfile.Upload()
            print(f'{upload_file} 上传成功')
            is_success = True
            break
        except SSLEOFError:
            wait_time = 2 ** retry_cnt  # 指数退避,依次等待1s、2s、4s后重试,降低触发限流概率
            time.sleep(wait_time)
    if not is_success:
        print(f'{upload_file} 重试{max_retry}次仍上传失败')
  1. 控制上传请求频率
    在两次上传之间添加固定延迟,把请求频率控制在每秒5次以内,避免触发API限流,可在上传循环末尾添加:
time.sleep(0.2)
  1. 大文件改用分片上传
    如果待上传的文件大小普遍超过10MB,可开启分片上传降低单次连接的传输压力,修改SetContentFile的参数即可:
# chunksize设置为10MB,可根据自身网络情况调整
gfile.SetContentFile(upload_file, chunksize=10*1024*1024)
  1. 优化网络链路
    如果你使用代理访问谷歌服务,可调高代理的超时时间,或者更换更稳定的代理链路,减少连接中途断开的概率。

内容的提问来源于stack exchange,提问作者anh1301

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 14:18:03