不管你是做OA、ERP、CRM,还是做一个内部文档管理平台,总有一个需求跑不掉,用户上传了文件,你得让他在浏览器里直接看到内容。
听起来不难,对吧?但你真去做的时候,坑是一个接一个。Word、Excel、PPT、PDF还好说,市面上有一些方案能凑合处理。可一旦遇到CAD图纸、3D模型文件、Visio流程图、xmind思维导图,甚至压缩包里套压缩包的场景,大部分方案就开始摆烂了。要么预览效果惨不忍睹,要么直接报错不支持,还有的方案虽然号称支持但渲染出来的排版完全对不上。
更让人头疼的是,很多预览组件跟你现有系统的技术栈绑死了。你用Java开发的系统,要集成一个C++写的预览服务,光是环境配置就能折腾一整天。有些商业方案确实能解决这些问题,但license费用动辄几万到十几万,一个文件预览功能花这个钱,怎么想都不太划算。
那有没有一个通用的开源方案能搞定这些?
还真有,今天聊聊kkFileView。
这个项目在GitHub上拿下了14k+的Star,在Gitee上同样有一大批忠实用户。简单来说,它就是一个基于Spring Boot搭建的文件在线预览服务,部署起来跟你启动一个普通的Java应用没什么区别,但预览能力覆盖了你能想到的绝大多数文件格式。
它的核心思路是:把文件预览做成一个独立的服务,你的业务系统不需要集成任何SDK,只需要调一下HTTP接口,把文件URL传过去就行了。 不管你的业务系统是Java、Python、PHP还是Go写的,都无所谓,因为本质上就是一个REST API调用。

支持的格式有多夸张?
我直接列一下,你感受一下覆盖面:
Office全家桶,doc、docx、xls、xlsx、xlsm、ppt、pptx这些自然不在话下,连pages这种苹果生态的格式也支持。国产WPS的wps、dps、et同样能预览。
OpenOffice和LibreOffice系的odt、ods、odp这些也没落下。
设计类文件支持Visio的vsd、vsdx,Photoshop的psd、eps,还有wmf、emf这些Windows系统图像格式。
技术圈常用的也基本全包了,xmind思维导图、bpmn工作流文件、drawio流程图、markdown渲染预览、各种代码高亮显示(java、py、js、css、sql等)。
更硬核的是,它还支持3D模型预览(obj、stl、gltf、fbx等格式)、CAD图纸(dwg、dxf)、DCM医疗影像,甚至压缩包(zip、rar、7z、tar、gzip)都能在线浏览,点进去还能逐个预览包里的文件。
音视频方面,mp3、mp4这些基础格式不用说,avi、mkv、rmvb、webm这些冷门格式也通过转码实现了预览支持。
粗略算下来,支持的文件类型超过50种。 这就意味着,你业务系统里碰到的文件格式,基本上都能直接预览,不用再到处找各种 specialized 的预览组件了。


技术架构和部署
后端用的是Spring Boot,这也意味着对Java技术栈的团队来说,二次开发和维护的门槛很低。它把不同文件的预览能力抽象成了接口,你想扩展一种新的文件类型,只需要实现对应的预览接口就行,整体架构还是比较好扩展的。
部署方式有好几种,按你团队的情况选:
Docker方式,适合容器化运维的团队:
docker pull keking/kkfileview:v5.0.1docker run -d -p 8012:8012 keking/kkfileview:v5.0.1还有一种更省事的方式,就是下载发行包直接跑。项目提供了Windows和Linux的一键启动脚本,不需要额外安装什么依赖,解压就能用。对不想折腾Docker的团队来说,这种方式友好很多。
需要特别说一下的是,v5.0.0开始要求JDK 21及以上版本,如果你还在用JDK 8或者11,需要关注一下这个变化。当前推荐使用v5.0.1,这个版本修复了两个安全漏洞,属于必升级的版本。
前端预览这块,Office文档提供了两种模式:一种是把文档转成图片逐页预览,适合文件比较大、带宽有限的场景;另一种是直接转PDF预览,适合内网环境、加载速度快的场景。你可以根据实际使用情况来选择。
关于开源协议
项目遵循Apache-2.0协议开源,这个协议对商用是比较友好的,你可以免费使用、修改,也可以用在商业产品里,不需要公开你的业务代码。但需要注意,如果你修改了kkFileView本身的源码再分发,那修改的部分是需要标注变更说明的。对于大部分团队来说,直接拿去用、部署在自己服务器上给业务系统调用,没有任何问题。
即刻体验一波
项目提供了一个在线演示站点,地址是 https://kkview.cn ,你可以直接上传文件体验各种格式的预览效果。建议别在生产文件上试,用一些测试文件就好。
接入也很简单,你的业务系统只需要拼一个URL:
http://你的kkfileview地址:8012/onlinePreview?url=Base64编码后的文件地址返回的就是一个预览页面,你可以直接嵌入到iframe里,也可以用window.open打开新窗口展示。整个接入过程基本上就这一行代码的事。
如果你的文件是ftp、S3或者内部接口返回的文件流,它同样支持,项目支持HTTP/HTTPS文件下载URL、文件下载流URL、FTP下载URL等多种预览源。



写在后面
文件预览这个需求,看起来不起眼,但真要做一个能覆盖各种格式的通用方案,工作量其实不小。 kkFileView作为一个社区持续维护了六七年的项目,经历了各种版本的迭代打磨,稳定性和兼容性都比较靠谱。
如果你当前的项目正好有文件在线预览的需求,或者现有的预览方案经常出各种兼容性问题,不妨花个把小时搭一个kkFileView试试,大概率能省下不少后续折腾的时间。
项目仓库:https://github.com/kekingcn/kkFileView
往期项目
开源|一款人人可用的BI工具,支持拖拽制图、多数据源连接、高效查询的数据可视化分析平台
开源|一款支持AI智能运维的跨平台SSH客户端,内置SFTP、分屏终端和工作区管理
开源|一款 AI 驱动的数据库客户端,支持自然语言生成 SQL、多数据源连接
开源|一款 Rust 打造的轻量数据库管理工具,支持 PostgreSQL、MySQL 等六大数据库
开源|一款本地优先的图片与 GIF 压缩工具,支持实时预估、批量导出与自托管
了解更多
文件在线预览、开源项目、Spring Boot、Office文档预览、kkFileView、文档预览方案、Docker部署
夜雨聆风