文章 587
评论 5
浏览 228589
文件预览服务并发瓶颈:LibreOffice 进程卡死?Docker 隔离池+超时强杀+队列调度

文件预览服务并发瓶颈:LibreOffice 进程卡死?Docker 隔离池+超时强杀+队列调度

公司用 LibreOffice 做 Office 文件的在线预览——把 Word/Excel/PPT 转成 PDF,前端用 PDF.js 展示。平时用着没问题,但每个月财务批量导出报表的时候,几十个人同时点预览。LibreOffice 进程 fork 了十几个,其中一个转一个 50MB 的 Excel 文件卡了 10 分钟。这个卡住的进程占着 CPU 不干活,后面排队的请求全堵住了。运维 ssh 上去 kill -9 才恢复。 LibreOffice 的 --headless 模式是为单次使用设计的,不是为高并发设计的。今天聊聊怎么用 Docker 容器隔离每个转换任务、超时强杀、再加一个队列缓冲——让文件预览服务从"一卡俱卡"变成"各管各的"。 问题:共享的 LibreOffice 进程没有隔离 最简单的预览方案是在服务器上直接调 LibreOffice: soffice --headless --convert-to pdf input.docx 第一次调会 fork 一个 LibreOffice 后台进程。后续调用如果这个进程还在,就复用。如果这个进程卡死了——比如遇到了一....

文件预览安全沙箱:Office 文档含宏病毒?LibreOffice 隔离进程转换,防服务器感染!

文件预览安全沙箱:Office 文档含宏病毒?LibreOffice 隔离进程转换,防服务器感染!

去年一个做在线文档平台的哥们半夜被运维叫起来。服务器 CPU 打到 100%,磁盘疯狂读写,查了半天发现有人在后台跑挖矿脚本。溯源之后找到入口——一个用户上传的 .docm 文件,里面有段恶意 VBA 宏。系统调用 Office 转 PDF 的时候,宏被执行了,服务端直接中招。 这事儿比 SQL 注入还吓人。注入你得找到注入点,宏病毒你只要把文件上传上去,别人帮你打开,你就进去了。 文件预览几乎是所有企业应用的标配——合同管理要预览 PDF、OA 系统要预览 Word、网盘要预览 Excel。但很少有人意识到,每次把用户上传的 Office 文件扔进转换引擎,都等于在服务器上双击了一个陌生人发给你的附件。 今天聊聊怎么用进程隔离的思路,把这个风险降到最低。 宏病毒是怎么在服务端生效的 很多人觉得"我服务端又没有 Office 软件,哪里来的宏?" 但实际上,现在主流的文件预览方案底层都绕不开文档转换引擎。LibreOffice、OnlyOffice、Apache POI——它们做的事情就是把 docx / xlsx / pptx 转成 PDF 或者 HTML,然后前端渲染。而这些引....

SpringBoot + 文件预览(PDF/Word/Excel)+ LibreOffice:在线文档无需下载即可查看

SpringBoot + 文件预览(PDF/Word/Excel)+ LibreOffice:在线文档无需下载即可查看

今天我们聊聊一个在实际项目中经常遇到的需求——如何让用户在线预览各种文档格式(PDF、Word、Excel等),而不需要下载到本地。这是一个非常实用的功能,特别是在内容管理系统、文档共享平台等场景中。 问题背景:文档预览需求 在传统的Web应用中,用户想要查看文档内容,通常需要先下载到本地再打开。这种方式有几个明显的问题: 用户体验差:需要额外的下载步骤 安全性问题:敏感文档可能被非法下载传播 存储压力:用户本地需要足够的磁盘空间 解决方案:LibreOffice + 文件转换 我们的解决方案是使用LibreOffice作为文档转换引擎,将各种文档格式转换为HTML或PDF格式,然后在浏览器中直接预览。这种方法有以下优势: 支持多种文档格式(Word、Excel、PowerPoint、PDF等) 转换质量高,保留原始文档的格式 可以很好地集成到SpringBoot应用中 实现思路 上传文档到服务器 使用LibreOffice将文档转换为HTML或PDF格式 将转换后的文件临时存储 通过HTTP响应返回给前端显示 核心技术选型 SpringBoot:作为应用框架 Libre....

服务端开发博客:后端架构、高并发、性能优化与微服务实战教程