分片上传并发冲突解决:多人同时传同名文件?分布式锁保障数据完整!
公司的网盘系统出了个诡异的 bug。用户 A 上传了一个 500MB 的视频文件,分成了 100 个分片。上传到第 80 片的时候,用户 B 也上传了一个同名的视频文件——可能是一个修订版。两个上传请求同时往同一个文件名下写分片,最后合并出来的文件里混了一半 A 的内容和一半 B 的内容。文件打不开,用户投诉。 分片上传的并发冲突比单文件上传难处理得多。单文件上传一次 HTTP 请求就完成了,有冲突也容易看出来。分片上传是几十上百个 HTTP 请求,冲突可能发生在任何时候——第一个分片被 B 覆盖,最后一个分片还是 A 的。结果就是一个"拼接怪物"。 今天聊聊怎么用分布式锁把分片上传的整个过程保护起来,确保同一时间只有一个上传任务在操作同一个文件。 冲突是怎么发生的 分片上传的流程通常是这样: 1. 前端发起分片上传 → 后端返回 uploadId 2. 前端逐个上传分片 → 每片带 uploadId + 分片号 3. 全部分片上传完 → 发起合并请求 两个人的冲突: 时间线: 用户 A 用户 B T1 创建 uploadId=A1 T2 上传分片 0~50 T3 创建 uploa....