v0.5.6 — 更新下载分片 + 断点续传
v0.5.6 — 更新下载分片 + 断点续传(解决国内 R2 大文件下载不稳定)
本次版本聚焦解决用户反馈的"更新失败"问题:国内访问 Cloudflare R2 下载 180MB+ 安装包时连接不稳定,旧的流式下载一旦中断就必须从头开始,导致更新成功率低。新方案用 HTTP Range 请求分片下载 + 断点续传,中断后可从断点继续,显著提升大文件下载稳定性。
改进
1. UpdateService 分片 + 断点续传下载
重写 downloadUpdate 方法,从单次流式下载改为分片 + 断点续传:
- HEAD 探测:下载前先发 HEAD 请求探测服务器是否支持
Accept-Ranges: bytes,支持则走分片路径,不支持则回退到原流式下载(保证兼容性) - 分片下载:每片 4MB,使用 HTTP Range 请求
bytes=start-end,只下载该范围的数据 - 断点续传:每片下载成功后立即追加写入
.part文件并更新.meta.json元数据(记录 version/sha256/bytesTotal/bytesDownloaded);进程中断后下次启动从断点继续,无需从头下载 - 单片超时保护:单片 30 秒超时(
AbortController),超时自动重试,避免单个分片卡死整个下载 - 单片重试:单片最多重试 5 次,退避 1s/2s/4s/8s/16s
- 整体轮次:最多 6 轮断点续传,每轮从上次中断处继续;连续 20 片失败则中止
- 元数据严格校验:
readDownloadMeta校验 version/sha256/chunkSize/bytesTotal 与.part实际大小一致性,脏断点自动丢弃重下 - 整体 SHA256 校验:下载完成后校验最终文件 SHA256,不匹配则清理所有产物并失败
2. 文件布局与清理策略
- 文件布局:
updates/Recall-{version}-setup.exe— 最终安装包updates/Recall-{version}-setup.exe.part— 下载中分片合并文件updates/Recall-{version}-setup.exe.meta.json— 断点续传元数据
cleanupIncompleteDownloads语义调整:只清理.tmp(流式回退产物),保留.part+.meta.json供断点续传;下次启动readDownloadMeta会校验.part一致性,脏断点自动丢弃重下
验证
- TypeScript 主进程与渲染进程类型检查通过
- 本地构建与 NSIS 安装包打包通过