工程上最危险的不是完全不可用,而是在理想环境里正常、进入真实网络和真实数据量后悄悄失去边界。 刷新会让普通网页失去原 File 对象,要求用户重选是正常权限边界。恢复协议不能只比较名称:同名不同内容很常见,大小与时间也可碰巧一致,最终可信依据应是原任务绑定的内容摘要。
文件传输要同时对账发送偏移、接收落盘、分块校验和双方终态。进度条到达百分之百,只能说明字节进入队列,不能证明文件完整可用。
工程边界与取舍
这项能力横跨客户端、网络与服务端,局部最优很容易制造全局故障。工程决策需要同时约束两端行为、持久化事实和运维预算。
- 任务首次创建时保存大小、修改时间、完整摘要和可选的分段快速指纹。
- 重选后先做廉价检查快速拒绝明显错误,再在 Worker 中完成强摘要验证。
- 验证期间保留接收端已有区间,选错文件不删除进度并允许再次选择。
分层验证可以加快错误反馈,但任何快速指纹都只是筛选。把完整摘要与原任务绑定,才能在发送端刷新后安全延续已有数据。
生产环境会怎样出错
不要把异常路径理解成弹一次提示。它还包括在途工作如何停、对端如何获知、残留数据如何处置,以及下一次操作是否会继承旧状态。
- 只比较文件名与大小,编辑后保持相同长度的文件被当作原文件续传。
- 快速指纹只采样头尾,攻击或巧合修改中间内容仍通过初筛并直接发送。
- 计算大文件摘要时 UI 没有阶段提示,用户以为卡住而反复刷新。
把测试跑成闭环
验证需要先写预期状态轨迹,再执行故障注入。每个阶段同时核对用户可见结果、两端协议状态、持久记录和资源计数,才能证明闭环成立。
- 准备同名同大小、同名不同大小、修改时间相同但内容不同的文件逐一重选。
- 在摘要计算 1%、50% 和完成前取消或刷新,确认已有接收区间不丢失。
- 篡改快速指纹未覆盖区,确认完整摘要始终是进入续传前的最终闸门。
当实现能够安全降级、重复执行不产生额外副作用、故障指标早于投诉出现时,这项能力才算具备长期维护价值。