# PROGRESS-web.md · 平台组(Web 前端) 更新:2026-11-03 11:50 ## 已完成 - `app.py`:FastAPI 应用,端口 8736,绑定 0.0.0.0 - `GET /`:中文单页应用(HTML/CSS/JS 全部内嵌,无外部 CDN,适配 2G 内存服务器) - 拖拽 + 按钮两种上传方式 - 处理进度条 + 阶段文字(页面分流 → 抽取识别 → 脱敏回写) - 结果区:敏感项表格(类型/原文/页码)、下载脱敏文件按钮、保留原件下载按钮 - `POST /api/process`(multipart):上传存 `/tmp/tm-uploads//input.pdf`,后台线程处理,立即返回 task_id - `GET /api/tasks` / `GET /api/tasks?task_id=`:任务状态轮询(含 tmkit 是否就绪标志) - `GET /download/{task_id}?type=redacted|original`:文件下载,未完成任务返回 409 - `GET /progress`:开发进展看板,渲染 PROGRESS-backend/web/deploy.md,缺失显示「进行中」 - tmkit 集成:按当前实际签名调用 `classify_pages(pdf_bytes)` → 逐页 `extract_page_words(page)` + `detector.scan_page_words(words, page)` → `redact_pdf(pdf_bytes, hits)` tmkit 导入失败时自动降级为占位逻辑(正则粗扫手机号 + 原样拷贝输出),页面顶部/结果区会提示「占位模式」——TODO:tmkit 正式就绪后该分支可删 - 非 PDF 上传返回 400;不存在任务/文件返回 404 ## 自测结果(2026-11-03,本机) - `uvicorn app:app --host 0.0.0.0 --port 8736` 启动正常 - `GET /` → 200;`GET /progress` → 200 - reportlab 生成测试 PDF(含手机号 13812345678 / 15987654321、身份证号) - `POST /api/process` → `{"task_id":"b603facc8ddc"}` - 轮询 `GET /api/tasks?task_id=` → `status:"done", items:[{"type":"phone","text":"15987654321","page":1}]` - `GET /download/...?type=redacted` → 200(966B,已脱敏) - `GET /download/...?type=original` → 200;错误 task_id → 404 ## 已知问题 1. **检测漏项(疑似分词问题,归管线组)**:测试 PDF 里 `13812345678` 紧跟在 `Phone: ` 后,fitz 抽词时与前一截文字合并成一个 word,detector 逐词正则匹配不到;`15987654321` 前有空格可正常检出。建议 detector 对 word 做跨词滑窗或先拼接整行文本再定位 bbox。 2. 任务表在内存中,重启后 /tmp 文件还在但任务状态丢失;上传目录无自动清理(长期运行会占盘)。 3. 处理为单线程逐任务并发(threading),大文件并发多了内存可能吃紧(2G 服务器);未做限流。 ## 下一步 - 与管线组确认 detector 跨词匹配方案(已知问题 1) - 加 /tmp/tm-uploads 过期清理(如 24h 定时或启动时清理) - 看板加自动刷新/最后更新时间;部署组联调 systemd 常驻