文件传输协议

传整个文件夹:目录清单、路径安全与部分恢复怎么设计

为目录树定义稳定 manifest,处理空目录、符号链接、重复名称、路径穿越、跨系统字符、总大小确认和单文件续传。

工程上最危险的不是完全不可用,而是在理想环境里正常、进入真实网络和真实数据量后悄悄失去边界。 浏览器拿到的是用户选中的相对路径和文件对象,接收端必须自己重建目录。manifest 是传输契约:每项包含规范化相对路径、类型、大小、摘要与任务 ID,但绝不能把发送方绝对路径带给远端。

文件传输要同时对账发送偏移、接收落盘、分块校验和双方终态。进度条到达百分之百,只能说明字节进入队列,不能证明文件完整可用。

工程边界与取舍

实现之前先列出不可违反的不变量,再为性能与体验留出调节参数。参数可以灰度,身份、权限和终态规则不能在运行时随意漂移。

  • 在发送前规范化分隔符并拒绝绝对路径、空组件、.. 与设备保留名称。
  • 先展示文件数、总大小和冲突策略,让接收方接受整个清单后再传正文。
  • 每个文件独立记录摘要和区间,目录任务汇总状态但不让一个失败抹掉其他成果。

文件夹传输不是循环发送文件。一个先验证、可解释冲突、按文件恢复的 manifest 才能保证跨系统还原与路径安全。

生产环境会怎样出错

失败路径需要与成功路径共享同一套状态模型。只弹一个错误提示却不释放资源、不传播终态,下一次恢复就会继承脏状态。

  • Windows 与 macOS 对大小写和保留字符不同,两个来源文件落到同一目标名。
  • 恶意相对路径越过用户选择目录,覆盖应用或用户其他文件。
  • 空目录不在 manifest 中,传输完成后目录结构与来源不一致。

把测试跑成闭环

验证需要先写预期状态轨迹,再执行故障注入。每个阶段同时核对用户可见结果、两端协议状态、持久记录和资源计数,才能证明闭环成立。

  1. 用跨平台保留名、Unicode 归一化、大小写冲突和超长路径构造清单夹具。
  2. 在任意文件中断后刷新双方,确认只恢复未完成文件且目录汇总准确。
  3. 尝试 ../、绝对路径和混合分隔符,确认接收端在写入前全部拒绝。

完成并不等于主路径跑通,而是每个终态都能对账、每个自动动作都受用户意图约束、每个成本都有明确上限。

把方法变成一次真实连接

打开 uCopy,让两台设备在浏览器里安全连接并开始传输。

开始免费使用