tm-desensitize/PROGRESS-web.md

2.7 KiB
Raw Blame History

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 常驻