断点续传进度持久化:上传中断后从头开始?Redis 记录分片状态,秒级续传!
公司做视频平台,用户上传一个 2GB 的素材文件,进度条跑到 95%,浏览器崩了。刷新页面重新上传,进度条又从 0% 开始。用户直接关了页面,再也没回来。 后来加了断点续传。用户重新打开页面,后端一问 Redis——"这个文件你上次传了 38 个分片,还差 2 个",直接从第 39 片开始传。3 秒搞定,用户甚至没注意到断过。 大文件上传这种事,不怕慢,怕的是断了之后要从头再来。今天聊聊怎么用 Redis 记录分片上传状态,实现真正的秒级续传。 先说清楚:为什么大文件上传非得分片 一个 2GB 的文件你不可能一口气传上去。网络稍微波动一下,整个 HTTP 请求就废了,2GB 白传。 所以业内的标准做法是分片上传:客户端把文件切成小块(比如每片 5MB),一片一片发。服务端收齐所有分片后,按顺序合并成完整文件。 客户端: 文件 2GB → 切成 400 片,每片 5MB 上传过程: 上传第 1 片 ✓ 上传第 2 片 ✓ ... 上传第 399 片(网络断了!)✗ 上传第 400 片 ✗ 服务端: 收到 398 片 等待第 399、400 片(永远等不到) 分片之后,问题就变成了....