适用场景
把 PDF / DOCX / XLSX / PPTX 等办公文件丢到网页里就能预览,并且支持添加批注(高亮、便签、区域框选)、导出批注数据、生成只读分享链接。适合资料审核、合同/标书校对、产品PRD评审、教学讲义批改等需要“看得见 + 留得住 + 可追踪”的场景。
交付物要求(请在Prompt中硬性约束)
产出一个可运行/可构建/可部署的在线工具:包含完整项目代码、清晰的文件树、开发/生产运行命令、Docker部署说明、以及测试用例或QA checklist(至少覆盖上传、预览、批注、导出、权限与异常)。
AI 提示词(Prompts)
你是资深全栈工程师与安全工程师。请从零生成一个“多格式文档安全预览与批注导出”在线工具的完整项目。
【目标】
- 用户上传文档(PDF/DOCX/XLSX/PPTX,先做类型与大小校验),系统生成预览页面。
- 预览支持:页码跳转、缩放、搜索(至少对PDF支持)。
- 批注支持:高亮、便签、矩形框选(最少三种);批注需可编辑/删除;批注与文档绑定。
- 导出支持:
1) 导出批注为 JSON(含页码、坐标、类型、内容、作者、时间)。
2) 可选:把批注“烧录”到PDF导出(如实现复杂,可先实现JSON导出并给出下一步方案)。
- 分享支持:生成只读分享链接(带token),可设置过期时间。
【技术栈(可按你的最优方案选型,但必须可落地运行)】
- 前端:Next.js 或 Vite + React;UI 自选(必须有干净的上传/预览/批注/导出界面)。
- 预览:PDF 用 PDF.js;Office 文档可选择“服务端转换为PDF再预览”的方案。
- 后端:Node.js(Express/Fastify/Nest任选其一);提供REST API。
- 存储:本地文件存储 + SQLite(或PostgreSQL,二选一);保存文档元数据、批注、分享token。
- 文档转换:推荐 Docker 内置 LibreOffice(soffice)做 DOCX/XLSX/PPTX -> PDF 转换;写出隔离与资源限制措施。
【必须输出的内容】
1) 项目目录结构(文件树)。
2) 关键依赖与安装命令。
3) 关键代码:
- 上传接口(校验类型、大小、反病毒/反宏策略说明、落盘路径策略)。
- 预览接口(返回可访问的预览URL,避免任意文件读取)。
- 批注CRUD接口(含鉴权:登录/匿名二选一,但分享链接必须只读)。
- 导出接口(JSON导出必须可用;如实现PDF烧录,需给出实现代码)。
- 分享链接生成/校验(token、过期、撤销)。
4) 前端页面:上传页、预览页(含批注UI与保存/导出按钮)。
5) Docker 部署:
- docker-compose.yml(web + converter/worker + db)。
- 生产环境变量说明(端口、存储路径、token密钥、最大文件大小等)。
6) 测试:
- 至少提供 API 的单元测试或集成测试(例如用 Vitest/Jest + Supertest)。
- 或者给出一份可执行的 QA checklist(>=20条),覆盖边界与失败场景。
【安全与稳定性硬约束】
- 禁止路径穿越:所有文件访问必须基于服务端生成的id映射。
- 上传限制:默认最大 30MB;仅允许白名单扩展名与MIME;拒绝可执行文件。
- 转换隔离:转换进程必须在容器/子进程隔离中运行,限制CPU/内存/超时;失败要返回可读错误。
- XSS/注入:批注内容需做转义;后端参数校验;token用强随机。
- 日志:记录上传、转换、分享访问、导出等审计日志(不记录原文内容)。
【输出格式要求】
- 先给“总体架构与数据流”。
- 再给文件树。
- 再逐段贴代码(按文件分块)。
- 最后给启动命令、部署说明、测试/QA。
可选增强(不影响主流程)
增加批注版本历史;支持多人协作的冲突处理;对分享链接加水印与访问次数限制;对敏感词做提示;导出一个“批注汇总报告”(Markdown/HTML)。
验收清单(发布者自检)
上传后能看到预览;批注能保存并刷新后仍在;JSON导出字段齐全;分享链接只读且过期生效;Docker一键启动;README包含运行/部署/配置;测试或QA覆盖异常与边界。