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

使用Python调用Google API上传8GB大文件至Google Drive遇MemoryError

解决Google Drive API上传大文件时的MemoryError问题

嘿,这个问题我之前帮好几个开发者踩过坑——小文件能正常上传,8GB大文件就爆内存,核心原因就是你的代码把整个文件一次性加载到内存里了,系统根本扛不住这么大的内存占用,自然就抛出MemoryError了。

Google Drive API专门提供了**可恢复上传(Resumable Uploads)**的方案,完美解决大文件上传的内存问题,而且还支持断点续传,下面给你具体的解决思路和代码示例:

为什么会出现MemoryError?

  • 小文件体积小,能轻松被加载到内存中完成上传;
  • 8GB的文件如果直接用read()这类方法读入内存,会瞬间占用数GB的内存,超出系统可用内存限制,触发内存错误。

解决方案:使用可恢复分块上传

以Python的Google Client Library为例,只需要调整上传逻辑,用分块的方式逐步读取文件并上传,每次只把一小部分文件加载到内存:

代码示例

from googleapiclient.discovery import build
from googleapiclient.http import MediaFileUpload
from google.oauth2.credentials import Credentials

# 初始化Drive服务(假设你已经完成了OAuth2认证,有有效的凭证文件)
creds = Credentials.from_authorized_user_file('token.json', ['https://www.googleapis.com/auth/drive'])
drive_service = build('drive', 'v3', credentials=creds)

# 定义文件元数据(文件名、父文件夹等)
file_metadata = {
    'name': 'large_8gb_file.bin',
    # 如果需要指定上传到某个文件夹,添加'parents': ['文件夹ID']
}

# 关键配置:开启可恢复上传+设置分块大小
# chunksize建议设置为10MB-100MB,根据你的网络和内存情况调整
media = MediaFileUpload(
    'path/to/your/8gb_file',
    chunksize=10 * 1024 * 1024,  # 10MB每块
    resumable=True
)

# 创建上传会话并逐步分块上传
request = drive_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(f"上传完成!文件ID: {response.get('id')}")

核心关键点说明

  • resumable=True:告诉API创建一个可恢复的上传会话,允许分块传输,中途网络中断后可以从断点继续上传;
  • chunksize:控制每次上传的文件块大小,确保每次只有一小块文件被加载到内存,避免内存溢出;
  • 绝对避免使用open(file, 'rb').read()这类一次性读取整个文件的操作,必须用流式/分块的方式处理大文件。

其他注意事项

  • 如果你用的是Java、Node.js等其他语言,思路完全一致:找到官方库中对应的可恢复上传API,不要一次性加载整个文件到内存;
  • 确保你的Google Drive账户有足够的存储空间容纳8GB的文件;
  • 如果上传过程中出现中断,只需要重新运行上传代码,API会自动识别未完成的上传会话,从断点继续。

按这个方式修改后,别说8GB,几十GB的大文件都能稳定上传,而且不会再出现内存溢出的问题。

内容的提问来源于stack exchange,提问作者Vikram Singh Chandel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:52:34