kkFileView 部署指南:30 秒启动文件在线预览服务,5 条路线选 1 条
【免费下载链接】kkFileViewUniversal File Online Preview Project based on Spring-Boot项目地址: https://gitcode.com/GitHub_Trending/kk/kkFileView
附件里一份 50 页的 PDF,不下载就没法看;对方回一句"文件在网盘里,你自己下",沟通链又断了一次。kkFileView 就是一个把这类麻烦接住的文件在线预览服务:基于 Spring Boot 的开源项目,支持 50 多种格式,本地化部署后,一个文件 URL 就能在浏览器里直接看内容。这篇 kkFileView 部署教程只讲落地:怎么起、怎么验、怎么调、怎么接进你自己的系统。
部署完成你拥有什么
按任意一条路线把服务跑起来,你手里就有下面这些可以立刻验证的东西:
- 格式覆盖:Office(doc/docx/xls/xlsx/ppt/pptx/csv)、WPS(wps/et/dps)、OpenDocument、PDF/OFD/RTF、CAD(dwg/dxf/dwf)、3D 模型(stl/obj/glb 等)、eml/msg 邮件、zip/rar/7z 压缩包、图片与音视频,全走浏览器渲染
- 统一预览入口:
http://服务器:8012/onlinePreview?url=文件URL,一个地址预览任何格式 - 集成接口:REST API + 现成的 iframe 页面,两种接法后文都有示例
- 预览安全开关:水印、
trust.host域名白名单(防 SSRF)、Basic 认证、AES 传输加密 - 参数热刷新:改配置约 2 秒自动生效,多数场景不用重启服务
- 可观测性:
/actuator/health和/actuator/metrics端点开箱可用 - 全部参数支持
KK_前缀环境变量覆盖,镜像升级时不用改代码
30 秒跑起来:Docker 一键启动命令
这条命令是全文唯一需要背下来的部分:
# 拉取镜像并启动,映射宿主机 8012 端口 docker run -d --name kkfileview -p 8012:8012 keking/kkfileview:5.0.0然后打开http://服务器IP:8012/。看到首页输入框,部署就算成了。把任意外部 PDF 链接粘进去,走一遍转换流程:第一次较慢,LibreOffice 在后台干活;同样的 URL 第二次打开会直接命中缓存。镜像里已经装好 JDK 21、LibreOffice 和中文字体,这一步没有任何环境前置。
选一条适合你的部署路线
三条路线的差异一张表说清楚,先对号入座再动手:
| 维度 | Docker 镜像 | 官方发布包 | 源码编译 |
|---|---|---|---|
| 适合人群 | 有 Docker 环境的服务器,生产与测试默认选择 | 无 Docker 的内网 Windows 机器、只有一台 Windows 服务器的场景 | 要改代码、打包定制镜像、跟进源码版本的人 |
| 优点 | 依赖(JDK 21 + LibreOffice + 字体)全部内置,一条命令启动 | Windows 版内置便携版 LibreOffice,不装办公软件 | 完全可控,改完直接出包 |
| 缺点 | 定制配置要改镜像或走环境变量 | Linux 发布包需自备 LibreOffice,依赖环境要手动对齐 | 编译耗时最长 |
| 耗时 | 约 5 分钟(含拉镜像) | 约 10~15 分钟 | 30 分钟起 |
推荐项:有 Docker 就用 Docker 镜像,它是默认答案;只有"没有 Docker"或"必须改代码"两个条件成立时,再分别走发布包或源码路线。
部署操作详解
路线一:Docker 镜像
准备
# 确认 Docker 可用、8012 端口未被占用 docker version curl -sv http://127.0.0.1:8012/ # 连接拒绝属正常执行
# 后台启动并映射 8012 docker run -d --name kkfileview -p 8012:8012 keking/kkfileview:5.0.0需要预览服务器本地文件时,挂载白名单目录并指定存储路径:
# 白名单目录 + 转换产物目录 + 8012 端口 docker run -d --name kkfileview -p 8012:8012 \ -e KK_LOCAL_PREVIEW_DIR=/data/files -e KK_FILE_DIR=/data/kkfileview/file \ -v /data/files:/data/files -v /data/kkfileview:/data/kkfileview \ keking/kkfileview:5.0.0验证
# 容器存活检查 + 首页检查 docker ps | grep kkfileview curl -I http://127.0.0.1:8012/ # 返回 200 即成功浏览器打开首页,粘贴一个 URL 预览,确认无乱码即完成。日志有异常时docker logs -f kkfileview追一下。
路线二:官方发布包
准备
- JDK 21 已安装(
java -version确认) - Linux:另装 LibreOffice,如
apt-get install libreoffice-writer libreoffice-calc libreoffice-impress;Windows 发布包内置便携版 LibreOffice,跳过此项
执行
发布包为kkFileView-版本号.tar.gz,解压后包含 bin(jar 与启动脚本)和 config 目录。先设两个环境变量再启动:
# 指向本机 LibreOffice 安装目录(Windows 写实际安装路径) export KK_OFFICE_HOME=/opt/libreoffice # 转换产物存储目录,确认有写权限 export KK_FILE_DIR=/data/kkfileview/file cd kkFileView-5.0.0 && bin/start.sh验证
# 首页状态码 + 健康检查 curl -I http://127.0.0.1:8012/ curl http://127.0.0.1:8012/actuator/healthhealth 返回 UP、首页可打开后,用真实文件 URL 走一次完整预览。
路线三:源码编译
准备:JDK 21、Maven,LibreOffice 按路线二补齐。
执行
# 克隆仓库并进入 server 模块 git clone https://gitcode.com/GitHub_Trending/kk/kkFileView cd kkFileView/server && mvn clean package # 运行打包产物 java -jar target/kkFileView-*.jar验证:启动日志出现 Tomcat 监听 8012 后,打开http://localhost:8012/,粘贴一个文件 URL 确认预览正常。这条路线与 Docker 路线的差别只在:镜像帮你装好的 JDK 和 LibreOffice,现在要你自己对齐版本。
部署完成后的验收清单
跑通首页只是起点,逐项勾完这份清单再交接给团队:
- 首页
http://服务器:8012/打开无报错,输入框可用 - 一份 docx、一份 xlsx、一份 pptx、一份 pdf 分别预览:Office 文档默认走 PDF 模式,排版与源文件一致
- xlsx 走前端解析(默认 web 模式),大表格不拖垮服务器 CPU
- 一个 zip 能展开文件树,包内 txt 或图片可点开
- 一个 mp4 能正常播放,不用先下载
- 20MB 以上文件:首次响应可接受,同 URL 二次打开秒开(缓存生效)
- 100 页以上 PDF 翻页流畅,左侧缩略图侧边栏默认可用
/actuator/health返回 UP,接进监控系统- 磁盘占用:确认自动清理已启用(默认开启,每天 3:00 执行),
file.dir所在分区容量充足 - 故意预览一个坏文件,页面给出明确错误,日志里能定位到 预览核心转换逻辑 对应记录
预览变慢或格式异常时的调优
资源分配:转换吃内存,JVM 堆要给够。Docker 路线在启动命令加-e JAVA_OPTS="-Xms1g -Xmx2g";裸机路线直接java -Xms1g -Xmx2g -jar ...。并发量上去时,把office.plugin.server.ports从默认的2001,2002扩成更多端口,等于多开几个 LibreOffice 转换进程分摊负载。
缓存策略:单机保持默认的cache.type=jdk即可,重复 URL 不再二次转换。多实例部署时切成cache.type=redis,并配spring.redisson.address指到共享 Redis。注意缓存是"URL 级"的:同一个文件换了 URL 参数就会重新转换。
大文件策略:确认异步任务权限已开启(kk.addTask默认 true),大文件会转成异步任务轮询,不会把请求线程卡死。PDF 按页数自动分档 DPI:50 页以内 150,200 页以上降到 72(pdf.dpi.small到pdf.dpi.xxlarge),想再快点可以继续调低。Office 转换默认超时 5 分钟(office.plugin.task.timeout),超过就拆文件或升内存。
媒体文件:视频转换对 CPU 和内存消耗最大,media.convert.max.size默认限 300MB,超出的直接拒绝;不需要转码能力的业务环境,建议直接media.convert.disable=true关掉头。
把预览接入你自己的系统
三种接法,按集成深度选:
- 直接跳转:给前端拼
http://kkfileview:8012/onlinePreview?url=...,最简单 - iframe 嵌入:在你的页面里嵌一个预览框,用户感知不到独立服务
- 反向代理:Nginx 把
/preview/**转给 kkFileView,业务侧不暴露服务真实地址
iframe 最小示例:
<!-- 注意:url 参数要先做 URLEncode --> <iframe src="http://kkfileview:8012/onlinePreview?url=https%3A%2F%2Fexample.com%2Fa.pdf" width="100%" height="720" frameborder="0"></iframe>跨域拉取文件需要在 配置文件位置 里保持kk.Getcorsfile=true。走 Nginx 反代时记得两件事:设base.url为对外域名,把业务文件的域名加进trust.host白名单。前端页面模板在 templates 目录,要改预览页样式从这里入手。
高频踩坑与解法
现象:转换出的 PDF 里中文全是方块或乱码原因:宿主机或容器缺中文字体;Docker 官方镜像已内置,自打镜像或裸机部署最容易漏解法:装fonts-noto-cjk一类中文字体包后刷新字体缓存(fc-cache -fv),重启服务再验
现象:预览某个外部 URL 直接报"未授权"原因:防 SSRF 默认策略,trust.host没配该域名时拒绝所有外部文件请求解法:把文件所在域名加进trust.host(逗号分隔,5.0.0 起支持通配符和 CIDR),生产环境不要用*
现象:大文件转换到一半报超时原因:默认 5 分钟任务超时,且转换是重计算解法:调大office.plugin.task.timeout和office.plugin.task.taskexecutiontimeout,同时确认异步任务权限开着;仍失败就升内存
现象:运行几天后磁盘被占满原因:转换产物和缓存在file.dir下持续累积解法:确认cache.clean.enabled=true、cache.clean.cron按预期执行,把file.dir指到容量充足的分区,必要时把清理时间调频
现象:8012 端口冲突,服务起不来原因:同机已有服务占用该端口解法:KK_SERVER_PORT=8080覆盖端口,同步改 Nginx 转发规则;反代场景别忘了把base.url一起改成对外域名,否则生成的链接指向内网地址
结尾
跑完部署、勾完验收清单,你的团队看任何文件都不再需要"先下载"。下一步:选一条路线把服务拉起来,用真实业务文件过一遍验收清单。
【免费下载链接】kkFileViewUniversal File Online Preview Project based on Spring-Boot项目地址: https://gitcode.com/GitHub_Trending/kk/kkFileView
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考