news 2026/4/18 5:20:08

SpringBoot 实现任意文件在线预览功能

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SpringBoot 实现任意文件在线预览功能

一 文件在线预览

在现代工作与生活环境中,文件共享与查看已经成为日常不可或缺的一部分。不过传统的文件处理方式要求用户下载文件到本地后才能查看,这不仅占用了设备的存储空间,还可能导致文件传播效率低下,甚至存在安全隐患。

因此,现在很多应用都支持文件在线预览,像我们常见的 docx、pptx、xlsx、md、图片、pdf 等等都可以在浏览器中直接查看文件内容,无需下载,大大提高了文件处理的便捷性和安全性。

二 kkFileView

kkFileView 是一个基于 Spring Boot 框架构建的开源文件文档在线预览解决方案。它不仅支持广泛的文件类型,而且使用非常简单。

kkFileView 主要有如下一些特点:

  • 广泛支持的文件类型:kkFileView 支持包括但不限于 doc、docx、xls、xlsx、ppt、pptx、pdf、txt 等主流办公文档,以及 jpg、jpeg、png、gif 等图像文件,mp3、wav、mp4、flv 等音视频格式,zip、rar、jar 等压缩包文件,还有多种类文本及代码文件,如 html、xml、json、yaml、java、py、cpp 等。

  • 易部署性:kkFileView 提供了 ZIP、TAR.GZ 发行包和 Docker 镜像,支持一键启动脚本和丰富的配置项,无论是物理机、虚拟机还是 Docker 容器环境,都能轻松部署。

  • 跨平台服务:kkFileView 支持 Windows、Linux 和 MacOS 等多种操作系统,实现了跨平台的无缝使用。

  • 高性能:基于高效的文件读取与流传输策略,kkFileView 在处理大文件时也能保持流畅,提升用户体验。

  • 安全性:通过设置访问权限和时效性 token,kkFileView 可以有效保护文件安全,防止未授权访问和恶意操作。

  • API 接口:提供 RESTful API,支持 Java、PHP、Python、Go 等多种开发语言,方便与其他系统集成。

  • 开源免费:kkFileView 遵循 Apache 2.0 许可证,用户可以根据需要自由修改和分发。

  • 扩展性强:支持多种文件类型,且易于添加新的文件类型支持或自定义显示模板。

三 使用 kkFileView

kkFileView 是独立部署运行的,所以使用起来非常方便。

3.1 安装部署

kkFileView 需要先安装才能使用。这也是官方推荐的使用方式。

安装有两种方式。

下载源码启动

  1. 从 https://gitee.com/kekingcn/file-online-preview/releases 下载最新版发行包

  2. 解压kkFileView-x.x.x文件(Windows.zip包,Linux/MacOS.tar.gz包)

  3. 打开解压后文件夹的 bin 目录,运行 startup 脚本(Windows 下以管理员身份运行startup.bat,Linux 以 root 用户运行 startup.sh)

  4. 浏览器访问本机 8012 端口 http://127.0.0.1:8012 即可看到项目演示用首页

Docker 启动

启动脚本:

docker run -it -p 8012:8012 keking/kkfileview:4.1.0

如果网络不畅,可以通过如下方式启动:

wget https://kkfileview.keking.cn/kkFileView-4.1.0-docker.tar docker load -i kkFileView-4.1.0-docker.tar docker run -it -p 8012:8012 keking/kkfileview:4.1.0

启动之后,页面如下:

3.2 文件预览

当我们的项目内需要预览文件时,只需要调用浏览器打开 kkFileView 的预览接口,并传入须要预览文件的 url,类似下面这样:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/js-base64@3.6.0/base64.min.js"></script> </head> <body> <script> var url1 = 'http://192.168.43.178:8080/1.csv'; var url2 = 'http://192.168.43.178:8080/2.png'; var url3 = 'http://192.168.43.178:8080/3.doc'; var url4 = 'http://192.168.43.178:8080/4.pdf'; var url5 = 'http://192.168.43.178:8080/5.pptx'; var url6 = 'http://192.168.43.178:8080/6.md'; </script> <button onclick="window.open('http://127.0.0.1:8012/onlinePreview?url='+encodeURIComponent(Base64.encode(url1)));">csv</button> <br> <button onclick="window.open('http://127.0.0.1:8012/onlinePreview?url='+encodeURIComponent(Base64.encode(url2)));">png</button> <br> <button onclick="window.open('http://127.0.0.1:8012/onlinePreview?url='+encodeURIComponent(Base64.encode(url3)));">doc</button> <br> <button onclick="window.open('http://127.0.0.1:8012/onlinePreview?url='+encodeURIComponent(Base64.encode(url4)));">pdf</button> <br> <button onclick="window.open('http://127.0.0.1:8012/onlinePreview?url='+encodeURIComponent(Base64.encode(url5)));">pptx</button> <br> <button onclick="window.open('http://127.0.0.1:8012/onlinePreview?url='+encodeURIComponent(Base64.encode(url6)));">md</button> <br> </body> </html>

url1~url6 是我这里几个不同格式文件的访问地址,调用 kkFileView 的预览接口 http://127.0.0.1:8012/onlinePreview,并将我们的文件 url 作为参数传递进去,就可以预览文件内容了。

是不是很简单!

这是官方给的使用方式。如果想把这个项目合并到自己现有项目中,也是可以的,只是稍微麻烦一些,需要分析接口并且手动合并代码了,不过对于有经验的小伙伴来说,应该也不是啥难事。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/8 23:56:49

计算机网络必看:信道的极限容量,408真题常考!

计算机网络必看&#xff1a;信道的极限容量&#xff0c;408真题常考&#xff01;在学习计算机网络时&#xff0c;你是否曾困惑&#xff1a;“为什么网速不能无限快&#xff1f;” “一个信道到底能传多快&#xff1f;”这些问题的答案&#xff0c;就藏在信道的极限容量这个核心…

作者头像 李华
网站建设 2026/4/16 15:50:11

MySQL----case的用法

在 MySQL 中&#xff0c;CASE 表达式是一个用于条件判断的功能&#xff0c;可以根据不同的条件返回不同的结果。CASE 表达式通常用于 SELECT 查询语句中&#xff0c;可以在 SQL 中灵活地进行条件判断和数据转换。CASE 有两种基本的语法形式&#xff1a; 简单 CASE 表达式&#…

作者头像 李华
网站建设 2026/4/9 19:58:00

MySQL 数据类型详解:TINYINT、INT 和 BIGINT

在设计数据库时&#xff0c;选择合适的数据类型对于系统性能和存储效率至关重要。MySQL 提供了多种整数类型来满足不同的存储需求&#xff0c;其中包括 TINYINT、INT 和 BIGINT。本文将详细介绍这三种整数类型的区别、应用场景和使用建议。 1. TINYINT TINYINT 是 MySQL 中存储…

作者头像 李华
网站建设 2026/4/16 17:19:11

基于python深度学习的面部表情识别系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了多年的设计程序开发&#xff0c;开发过上千套设计程序&#xff0c;没有什么华丽的语言&#xff0c;只有实…

作者头像 李华
网站建设 2026/4/16 23:53:17

【ITK手册006】itk::Point 深度解析与实用指南

【ITK手册006】itk::Point 深度解析与实用指南 0. 概述 在 ITK (Insight Segmentation and Registration Toolkit) 的几何框架中&#xff0c;itk::Point 是最基础的类之一。它用于表示 n 维欧几里得空间中的一个静态位置&#xff08;坐标&#xff09;。 与 itk::Vector&#xf…

作者头像 李华
网站建设 2026/4/15 20:19:44

论文写作隐藏技巧:7款AI神器5分钟生成3万字+真实参考文献揭秘

开头&#xff1a;90%的学生不知道的论文“黑科技”&#xff0c;导师私藏的学术加速密码 你是否经历过&#xff1a; 对着空白文档熬到凌晨3点&#xff0c;初稿还停留在“研究背景”&#xff1f;导师的修改意见像“天书”&#xff0c;改了3遍还是被打回&#xff1f;查重报告飘红…

作者头像 李华