传到一半断网,再打开程序,列表里还有一个进度数字,任务却未必接得上。我把传输状态从页面里往核心的持久任务上挪,重新梳理了暂停、失败、重试和取消。
上传先核对远端已经存在的分块,再继续下一块。下载保留临时文件,通过 Range 接着读;临时文件同时绑定内容版本,避免同名文件更新后拼出一份新旧混杂的内容。
任务和进度都落到本地库里,切页和重启后再读回来。失败任务还得保留来源文件,特别是文件选择器交付的临时副本,否则下一次点重试就找不到原始字节了。
取消也沿着任务传到磁盘读取和网络请求,等收尾以后再更新界面。暂停的任务可以继续,取消则结束本次操作。已经成功发布的文件会留在原处,避免迟到的取消请求误清内容。
退出程序时又查到一个顺序问题:HTTP 停了,后台同步、传输和缩略图任务可能还在写数据库。原来数据库关得太早,正常退出也会偶尔报错。
现在先停止接收新工作,取消或等待在途任务,再关闭数据库和日志。我重点检查了请求是否停止、临时文件是否保留,以及重启后能否接回同一份任务。