**1. 切片 (Slicing):**
`file.slice(start, end)`。文件对象 File 继承自 Blob,切片操作是**零拷贝**的,速度很快。
**2. Hash 计算 (Web Worker):**
计算整个文件的 MD5 比较耗时,会阻塞主线程。
**必须**使用 Web Worker 在后台线程计算。
通常使用 `spark-md5` 库,支持增量计算 (append)。
**3. 并发控制:**
不能一次性把 100 个切片请求全发出去,浏览器会卡死。
需要实现一个 Promise 并发调度器 (Limit Concurrency),比如同时只发 6 个请求。
**4. 暂停/恢复:**
- 暂停: `XMLHttpRequest.abort()` 取消正在进行的请求。
- 恢复: 重新检查服务端已上传切片,通过过滤列表实现续传。