大文件分片上传断点续传:网络中断进度丢失?Redis 记录分片状态+秒级续传
公司的用户上传 2GB 的视频文件到网盘,传了 80% 的时候网络断了。页面刷新后,上传列表里空空如也——前端状态丢失,后端也没记录哪些分片已经上传成功。用户只能从头再来。2GB 的文件,从头再传一遍,用户的耐心也从头归零。 分片上传天然支持断点续传——前提是你知道哪些分片已经上传成功了。不知道的话,就只能全量重传。今天聊聊怎么用 Redis 记录每个分片的上传状态,让网络断了之后从断点秒级续传,而不是从头开始。 分片上传的断点问题 分片上传的流程很简单:前端把大文件切成 N 片,逐片上传。后端每收到一片就存起来。 文件 2GB → 切 200 片 × 10MB → 逐片上传 如果第 150 片上传失败(网络断了、服务器卡了),最好的情况是从第 150 片继续传。但前端不知道自己传了哪些片——因为前端的进度存在内存里,页面一刷新就没了。 后端需要提供一个能力:告诉前端哪些分片已经上传成功了。 Redis 记录分片状态 给每个上传任务一个 uploadId(UUID),用 Redis 的 Set 记录已上传的分片编号: // 记录分片已上传 redis.sadd("upload:....