42 lines
2.7 KiB
Markdown
42 lines
2.7 KiB
Markdown
# 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/<task_id>/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 常驻
|