download-server.js(端口 8899,DL_ROOT=dl-hub)| 文件大小 | 上传路径 | 重传行为 |
|---|---|---|
| ≤ 64MB | 一次 multipart POST 到当前目录 | 写临时文件后 renameSync 覆盖同名文件,无存在性检查 |
| > 64MB | 分块续传 /api/upload/chunk + /api/upload/complete | 全量重传 + 覆盖:续传进度只存在于 .upload-parts/<hash>/,而上传成功后会 fs.rmSync 删掉会话,所以 status 恒返回 exists:false |
唯一存在的「跳过」是块级断点续传:仅当上次上传中途中断、会话目录仍在,且 fileSize 与 totalChunks 都一致时,才会跳过已收到的块;不一致则 abort 后从零传。
GET /api/upload/status 新增可选参数 size:当目标文件已存在且字节数一致时返回 {ok:true, done:true, skipped:true, target:"相对路径", size:N},前端据此直接跳过,不重传、不覆盖。size 调用时行为与旧版完全一致(向后兼容)。?rename=1;大文件:/api/upload/complete 请求体带 "rename":true。uniqueDest() 退避规则,另存为 name (2).ext、name (3).ext…(与回收站恢复的改名规则一致),原文件保留;响应带 renamed:true 并在页面上提示「已存在同名文件,另存为 …」。uploadChunked() 的会话 key 为 rel + '/' + 文件名,缺少当前目录这一层前缀,而服务端以 用户上传 为基准解析 —— 因此在 用户上传/某子目录/ 页面上传 >64MB 文件,最终会落盘到 用户上传/根,而不是当前目录(小文件走 multipart 路径没有这个问题)。window.__UP_REL__(当前目录相对 用户上传 根),前端拼出与服务端一致的目标路径。根目录下 __UP_REL__ 为空串 → 会话 key 与旧版完全一致,不影响任何在传会话。测试脚本 /tmp/up-test.mjs(对 127.0.0.1:8899 真实 HTTP 调用,测试目录用后即删):
done:true;大小不符→不跳过;不带 size→不跳过;目标不存在→不跳过?rename=1 重传 → renamed:true,原文件保留为 v1,新文件 small (2).txt 为 v2renamed:false)done:true、会话已清理(再 complete 返回 404)rename:true → renamed:true,另存 big (2).bin 且原 big.bin 保留__UP_REL__="zz-上传功能测试"、根目录为空串、桌面页与移动页均含两个复选框;页面内联 JS 通过 node --check服务端 node --check 通过;已备份原文件为 ~/Downloads/download-server.js.bak-20260912-214503。
dl-server.service 托管(Restart=always + 开机自启,cgroup 独立于工具会话)。此前 nohup 启动的进程仍留在瞬态工具 shell 的进程组里,会被静默杀死 —— 根因与修复详见同目录《2026-09-12-下载服务静默死亡根因与systemd托管.md》。.upload-parts/ 中,重新选择后会从断点继续,不会从头传。.upload-parts 占用 63GB,目标为 用户上传/models/Stable-diffusion/**(已在传约 45 个模型,多数进行到 20~24/32~104 块);models 目录下已完整落盘 13 个文件。/home 805G,已用 270G,可用 495G;dl-hub 共 72G,其中 用户上传 70G(含 63G 分块暂存)。cp ~/Downloads/download-server.js.bak-20260912-214503 ~/Downloads/download-server.js
bash ~/Downloads/restart-dl-server.sh # 注意:会中断在传分块
~/Downloads/download-server.js(改动点:handleUploadStatus 跳过判定、handleUploadComplete 的 rename、handleUpload 的 finalize() 改名落盘、upRelJs() 注入、前端 UPLOAD_JS/UPLOAD_ZONE_HTML/UPLOAD_CSS)~/Downloads/download-server.js.bak-20260912-214503/tmp/up-test.mjs(临时文件,重启后可能被清理)