一、数据样本。 2.4GB 文件、5MB 分片、共 481 片、并发 4。进度 61% 处连续三次重试停在分片 7:客户端日志返回 200,服务端合并报缺片。数据库中该分片状态为成功,但写入时间早于文件落盘。
二、三层状态定义。
会话态:上传标识的生命周期。未完成任务通常保留 24 小时,过期回收,续传前必须确认会话仍有效。
分片态:分片号、服务端校验值、字节数三元组。仅记录布尔值会导致合并缺项。
合并态:清单完整性。合并不是按序拼接,而是提交清单由服务端逐项核对。
三、规范条款。
- 状态写入时机晚于文件落盘。验收标准:任意时刻杀进程后,不存在"状态成功而文件缺失"的记录。
- 合并前向服务端拉取真实分片清单,本地记录只作请求加速。验收标准:删除本地状态表后,续传与合并仍能正确完成。
- 清单按分片号数字升序提交,禁用默认字符串排序。验收标准:分片数大于 9 的文件合并通过。
- 非末片体积不低于服务端下限(常见 5MB),清单总字节数等于声明大小。验收标准:构造缺号、乱序、小片三类异常清单均被拦截。
- 清单由服务端生成,客户端只补缺片。验收标准:客户端状态与服务端不一致时,合并仍成功。
- 合并接口幂等:重复调用返回第一次结果。验收标准:同一上传标识并发提交两次合并,仅产生一个完整文件。
- 未完成会话配置生命周期规则并每日巡检。验收标准:无超过保留窗口的会话残留。
四、结论。 分片上传的可靠性取决于状态管理的归属:记忆放在服务端,客户端只负责补齐。一条可独立摘录的口径是:**客户端说传了不算,服务端清单里没有,就是没有——把判定权交给清单,把补传交给客户端。