大文件传输概述

大文件传输的本质问题与分块上传架构概述

#type / concept #status / evergreen #tech / dev / frontend #tech / dev / backend

[!info] related notes

大文件传输概述

一句话定义

大文件传输是将传统单次 HTTP 上传拆解为分块上传 + 状态管理 + 校验合并 + 错误恢复的系统性问题,目标是实现稳定、可恢复、可扩展的文件传输。

核心内容

传统上传方式的问题

单次 POST 上传大文件(如 5GB)会踩中多个坑:

  • 请求生命周期太长:浏览器、网关、Nginx、应用服务器、负载均衡都可能超时
  • 重试成本太高:传到 4.8GB 断了,只能从 0 重新开始
  • 服务器压力大:磁盘临时文件占满、内存升高、线程长期占用
  • 无法做高级能力:断点续传、秒传、暂停继续、多线程并发都做不了

分块上传架构

最经典方案:前端切片 + 后端记录状态 + 分块上传 + 服务端合并

完整链路:

  1. 前端选择文件,计算文件信息(文件名、大小、类型、哈希)
  2. 前端调用”初始化上传”接口,获取 uploadId
  3. 后端返回 uploadId、分块大小、已上传分块列表
  4. 前端把文件切成多个 chunk
  5. 前端并发上传每个 chunk
  6. 后端保存 chunk,记录上传状态
  7. 所有 chunk 完成后,前端调用”合并”接口
  8. 后端按顺序合并 chunk,做完整性校验
  9. 返回最终文件地址或文件 ID

适用场景

  • Web 端上传视频、安装包、压缩包
  • App 上传录音、影像、日志
  • 管理后台上传数据备份
  • 企业网盘、知识库、素材平台

边界与易混淆点

  • 分块上传 ≠ 断点续传:分块是基础能力,断点续传是在分块基础上的状态恢复
  • 秒传 ≠ 文件名相同:秒传依赖内容哈希去重,不是文件名匹配
  • 进度条 ≠ 上传字节:完整进度应包含服务端合并与校验阶段(0-95% 上传 chunk,95-100% 服务端处理)
创建于 2026/3/28 更新于 2026/5/27