我们之前在做文件上传的时候,只是考虑最简单的txt文档,或者简单的文本类的,但是随着大家的实际代码需求,把这个项目的文档和技术要求、IO表、代码逻辑图、程序片段导入等等,这些都是非常正常的需求。
所以,我们在发布V2.7版本前,把这一点也再度更新。RealPLC V2.7重要更新!定于6月25日左右发布。这期和大家重点分享下主要的内容,在更新后,可以方便大家参考和查阅,也是个简单的说明:

补齐了 RealPLC 文件上传能力的三大空白:图片/截图上传、服务端文档解析、大文件分片上传。采用"服务端预提取文本 + 按需多模态路由"策略,文档类省 60-80% token,截图走视觉模型。
主要范围: PDF · Word · PPT · 旧版 Office · 截图/图片 · PLC 代码 · 表格 · 文本
文件格式:
.txt,.md,.csv,.json,.xml,.st,.scl,.l5x,.l5k,.log,.ini,.pdf,.docx,.xlsx,.pptx,.png,.jpg,.jpeg,.gif,.webp,.bmp'类型
| 功能 | 说明 |
|------|------|
| 📎 上传入口 | Plus 菜单统一入口,拖拽/Ctrl+V 粘贴均支持 |
| 📊 状态卡片 | 上传 → 扫描 → 转换 → 解析 → ✅ 就绪,逐阶段显示 |
| 📈 进度条 | 分片上传实时进度,可续传 |
| 🖼️ 图片灯箱 | 点击图片卡片全屏预览 |
| 🚫 发送门控 | 文档未解析完成前禁止发送 |
| 🌐 国际化 | 12 个新增翻译 key |
| 分片上传 |
/api/v1/file-uploads/init → /chunks → /complete,5MB 分片,SHA-256 校验,幂等重试 |
| 异步解析 | Worker 队列(并发 2),60s/180s 超时,后台扫描→解析→存储 |
| 文件管理 | 元数据、预览、文本预览、软删除 |
| 清理 GC | 分片 30 分钟闲置清理,文件 7 天无关联清理,软删除 24 小时清理 |
| 发送验证 | /chat/send 前校验:所有权、数量、大小、扫描状态、解析就绪 |
@realplc/document-parser| PDF | 自研流解析(FlateDecode + 文本提取) | 文本 + 页数 |
| DOCX | Mammoth → Markdown | 保留标题/表格 |
| PPTX | ZIP + XML | 逐页标题+正文 |
| XLSX/CSV | ZIP + 共享字符串 / 编码检测 | 表+行文本 |
| 图片 | Sharp 压缩 (≤4000px, GIF→PNG) | 压缩预览 |
| PLC/文本 | 编码检测 (UTF-8/Latin-1) | 原文 |
•
文件类型校验(扩展名 + MIME + magic bytes)
•
ZIP 炸弹防护(条目/体积/压缩比上限)
•
XXE 防护(DOCTYPE/ENTITY/XInclude 检测+清除)
•
Prompt 注入防护(<uploaded_file_context> 边界包裹 + sentinel 转义)
•
恶意扫描钩子(可插拔 ClamAV 接口)
•
路径穿越防护(UUID 目录)
•
所有权校验
| 格式 | .doc → DOCX → Mammoth,.ppt → PPTX → 自定义 |
| 隔离 | Docker 容器,非 root 用户,只读文件系统 |
| 超时 | 120s,失败回退纯文本 |
| 启动 | docker compose up 随主服务一起启动 |
最后如果在实际用到文件上传功能的时候,出现任何问题或者更好的建议欢迎提出哦!
参考链接:
【1】https://www.realplc.com