文件预览与版本保存¶
文件阅读是Gradio中的按需扩展面板。登记、存储、转换、保存与前端阅读分别实现,不在导航或启动时加载PDF解析器或运行Office转换。
三类产物¶
原始字节用于下载和视觉预览,提取文本用于知识检索,转换PDF用于Office阅读。知识库以original_file_id关联新增原件;旧记录的提取文本继续可读,没有原件时明确标识。会话附件保留准备阶段的字节快照并登记阅读ID,阅读后的修改不追溯改写已经发送的模型上下文。
文件登记使用UUID与来源元数据,项目路径经过范围和类型检查;Office、PDF、HTML、图片和代码只读。原文件哈希是打开时版本,Markdown写入同时核对当前字节。修改前版本保留;知识库保存时将文件、正文、摘要、分块和元数据置于受控提交步骤,失败时恢复文件并回滚数据库更新。该机制面向当前单进程服务,不宣称提供分布式文件锁或跨主机事务。
Office转换¶
LibreOffice以独立用户配置、无界面进程处理文件。相同原件和转换配置共用缓存,有界工作队列防止普通页面承担转换等待。缓存键包含内容哈希、转换器位置及修改时间、版本/字体配置和安全配置模板;成功产物通过PDF解析与摘要校验后才标为完成。
Windows使用项目内较短的实际工作目录,避免Office内部规范化路径后遇到深目录限制;数据库和原件保留原位置。缓存和版本存储优先采用同一目录的Windows短路径别名,Linux保留原路径。超时停止本轮进程树,退出服务时关闭任务队列,不使用现有用户Office会话。
宏扩展不在格式白名单;Office用户配置设定宏安全等级,压缩容器检查条目与展开体积。此进程隔离不是网络或操作系统沙箱;pip/npm扫描也不覆盖本机Office二进制。格式、字体与操作系统差异需要真实样本分别核对,不能由一个成功PDF推出全部文件保真。
阅读与HTML隔离¶
PDF.js和Markdown渲染资源本地固定版本,仅打开对应文件时加载;前端不依赖Office编辑服务。PDF以页面画布阅读,搜索按文字基线和横坐标恢复相同视觉行,避免中文混合字体按字体批次输出时打乱词序;复杂多栏、竖排或缺少文字层仍可能影响搜索。
Markdown默认禁用原始HTML,图片仅通过受控项目资源接口读取。上传HTML置于不允许脚本执行的独立iframe,另限制外部资源;与平台生成且已有独立预览的Skill报告区分处理。阅读面板的未保存状态同步给模块导航,关闭或跨模块切换先处理未保存内容。
浏览器同站点约束用于阻止跨站网页调用新增登记/写入接口,不替代用户认证。项目沿用既有本地部署模型,文件身份、路径限制与只读策略不等同于多租户权限系统。
操作与实际配图见文件阅读指南。