# 下载中心维护记录：用户上传回收站功能 + 根目录规整（2026-09-09）

## 一、根目录分类规整（dl-hub）

之前根目录编号有重复（`05-`×3、`08-`×5、`10-`×2），且残留 2026-09-03 事故后未找回内容的**空壳目录**。本次处理：

### 删除空壳目录（0 文件，先 find 确认后 rmdir）
- `05-景甜孙宇晨八卦`（事故后未找回，空）
- `05-OSS中国战场报告`（空）
- `08-无线网卡提速评估`（空）

### 改名（编号唯一化，内容未动）
| 原名 | 新名 | 原因 |
|---|---|---|
| `08-Boogu-Image部署` | `18-Boogu-Image部署` | 与 08 冲突；现与 17-Krea2（图像模型部署）相邻 |
| `08-MiniMaxH3-dasiwa加速` | `19-MiniMaxH3-dasiwa加速` | 与 08 冲突 |
| `08-MiniMaxH3-H3Max调研` | `20-MiniMaxH3-H3Max调研` | 与 08 冲突 |
| `10-大创-四大创新-壁垒突破示意图` | `21-大创-四大创新-壁垒突破示意图` | 与 10 冲突 |

**保留原名**（有外部引用/硬依赖）：`08-低配置图片分析模型调研`（vision-identify 技能引用）、`10-视频生成流水线`（dsw-v18/h3-turnaround 技能引用）、`05-下载服务维护`、`09-迅雷下载`（服务端删除守卫 DELETE_ROOT 依赖）。

### 同步更新
- `00-说明.md`：重写为全量目录表（01–21）+ 改名对照表 + 删除规则说明。
- `21-大创…/壁垒突破-示意图说明.md`：下载中心链接 10- → 21-。
- `19-MiniMaxH3-dasiwa加速/…/报告_MiniMax_H3_dasiwa加速部署.md`（及 ~/Downloads 工作副本）：自述路径 08- → 19-。
- 历史事故记录 `05-下载服务维护/20260903删除功能事故与恢复说明.md` 保留原貌（叙述 9/3 当时状态，不改写）。

> ⚠️ 旧链接（含本目录旧编号 URL）失效时按对照表改编号即可恢复。

## 二、用户上传删除功能（回收站模式）

### 需求与设计
- 之前 🗑 删除仅限 `09-迅雷下载`（彻底删除），`用户上传` 只能传不能删。
- 本次为「用户上传」目录（含全部子目录）增加删除：**删除 = 移入同目录下的隐藏回收站 `.trash`**，可恢复、可单条彻底删除、可一键清空。删除范围仍白名单化，重演 9/3 事故的根路径删除在服务端多重 403。

### 操作语义（DELETE 接口，全部需 `?confirm=1`）
| 操作 | 路径 | 行为 |
|---|---|---|
| 删除(09区) | `09-迅雷下载/**` | 彻底删除（原行为不变） |
| 删除(上传区) | `用户上传/**`（非回收站） | 移入同目录 `.trash`，同名自动加 (2)(3)… |
| 恢复 | `用户上传/…/.trash/<条目>?restore=1` | 移回删除前所在目录（同名自动改名） |
| 单条彻底删除 | `用户上传/…/.trash/<条目>` | 直接删除（不可恢复，弹窗明确提示） |
| 清空回收站 | `用户上传/…/.trash/?empty=1` | 删除回收站内全部条目（保留 .trash） |
- `?dry=1` 统计不执行（文件夹删除弹窗前展示文件数/大小）。
- 守卫：根目录/`用户上传`根/`09-迅雷下载`根本身、非白名单目录、`..`越界、无 confirm、回收站目录直接删 → 一律 403/400/404。

### 前端
- 桌面 + 移动端列表：`用户上传` 区每行 🗑（弹窗文案改为"移入回收站，可恢复"）；进入 `.trash` 页显示 ↩ 恢复 + 🗑 彻底删除；上传区页面（非回收站内部）出现非空回收站时显示横幅：`🗑 回收站（N 项）` + [浏览回收站] + [清空回收站]。
- `.trash` 为隐藏目录，正常列表页不显示；回收站页隐藏上传框（防误传进回收站）。
- 09-迅雷下载 弹窗与行为与改造前一致。

### 安全测试记录（全部通过）
- 403：`DELETE /?confirm=1`、`/用户上传/`、`/09-迅雷下载/`、`/01-AI课程设计项目/`、回收站目录本身直接删。
- 400：清空回收站不带 confirm。
- 404：删除不存在的文件。
- 200 全流程：上传区文件/目录 → 移入 `.trash` → 单条恢复 ✓ / 单条彻底删除(purge) ✓ / 清空回收站 ✓；嵌套子目录（`用户上传/xx/sub/`）回收站同样生效；恢复后同名文件自动改名。
- 页面渲染：上传区按钮含 `data-delmode="trash"`；回收站页 `purge` + ↩；项目目录（如 01-）0 个删除按钮；移动端 UA 行为一致。
- 测试产生的临时文件/目录已全部清理，`用户上传` 未动任何真实内容。

## 三、变更文件
- `~/Downloads/download-server.js`（备份：`download-server.js.bak-20260909-010249`）
- `~/Downloads/dl-hub/00-说明.md`（目录表 + 对照表 + 删除规则）
- 服务重启脚本：`~/Downloads/restart-dl-server.sh`（无改动，直接复用）
