百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

整合 kkfile 实现文件预览

wptr33 2025-05-22 14:12 29 浏览

一、简介

kkFileView为文件文档在线预览解决方案,该项目使用流行的spring boot搭建,易上手和部署,基本支持主流办公文档的在线预览,如doc,docx,xls,xlsx,ppt,pptx,pdf,txt,zip,rar,图片,视频,音频等等。

二、特性

  1. 支持word excel ppt,pdf等办公文档;
  2. 支持txt,java,php,py,md,js,css等所有纯文本;
  3. 支持zip,rar,jar,tar,gzip等压缩包;
  4. 支持jpg,jpeg,png,gif等图片预览(翻转,缩放,镜像);
  5. 支持mp3,mp4,flv等多媒体文件预览;
  6. 使用spring boot开发,预览服务搭建部署非常简便;
  7. rest接口提供服务,跨平台特性(java,php,python,go,php,....)都支持,应用接入简单方便;
  8. 支持普通http/https文件下载url、http/https文件下载流url、ftp下载url等多种预览源;
  9. 提供zip,tar.gz发行包,提供一键启动脚本和丰富的配置项,方便部署使用;
  10. 提供Docker镜像发行包,方便在容器环境部署;
  11. 抽象预览服务接口,方便二次开发,非常方便添加其他类型文件预览支持;
  12. 最重要Apache协议开源。


三、部署

1. 环境要求

  • Java: 1.8+
  • LibreOffice或OpenOffice(Windows下已内置,CentOS或Ubuntu下会自动下载安装,MacOS下需要自行安装)

2. 部署运行

1). 物理机或虚拟机上运行 #

  • 从 码云发行版本 下载最新版发行包
  • 解压kkFileView-x.x.x文件(Windows用.zip包,Linux/MacOS用.tar.gz包)
  • 打开解压后文件夹的bin目录,运行startup脚本(Windows下以管理员身份运行startup.bat,Linux以root用户运行startup.sh)
  • 浏览器访问本机8012端口 http://127.0.0.1:8012 即可看到项目演示用首页

2). Docker容器环境环境运行 #

拉取镜像 #

# 网络环境方便访问docker中央仓库
docker pull keking/kkfileview:4.1.0


# 网络环境不方便访问docker中央仓库
wget http://kkfileview.keking.cn/kkFileView-4.1.0-docker.tar
docker load -i kkFileView-4.1.0-docker.tar

3. 运行

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

浏览器访问容器8012端口 http://127.0.0.1:8012 即可看到项目演示用首页。

四、使用

1. vue cli 指向 kkfile 服务

2. 安装 base64 编码解码

npm install --save js-base64

3. 增加按钮,实现调用

在下载按钮下方新增一个预览按钮

<el-button
    type="text"
    size="small"
    icon="el-icon-download"
    @click="download(scope.row, scope.index)"
>下载
</el-button>
// 以下新增一个预览按钮
<el-button
    type="text"
    size="small"
    icon="el-icon-upload"
    @click="view(scope.row, scope.index)"
>预览
</el-button>

实现调用 view 方法

const fileURL = (row: any): string => {
  return ``;
};


const preview = (row:any) => {
  const protocol = window.location.protocol;
  const host = window.location.host;
  const file_url = `${protocol}//${host}/api/admin/sys-file/${row.bucketName}/${row.fileName}?TENANT-ID=${Session.getTenant()}&access_token=${Session.getToken()}`;
  const view_url = 'http://localhost:8012/onlinePreview?url=' + encodeURIComponent(window.btoa(file_url));
  window.open(view_url, '_blank');
};


当您的项目内需要预览文件时,只需要调用浏览器打开本项目的预览接口,并传入须要预览文件的url。

注意,如果要预览的url里包含需要转义的特殊字符,如下表格,请使用encodeURIComponent(url)转义:

符号

url中转义结果

转义码

+

URL 中+号表示空格

%2B

空格

URL中的空格可以用+号或者编码

%20

/

分隔目录和子目录

%2F

分隔实际的URL和参数

%3F

%

指定特殊字符

%25

#

表示书签

%23

&

URL 中指定的参数间的分隔符

%26

=

URL 中指定参数的值

%3D


五、预览展示

1. 文本预览#

支持所有类型的文本文档预览, 由于文本文档类型过多,无法全部枚举,默认开启的类型如下 txt,html,htm,asp,jsp,xml,json,properties,md,gitignore,log,java,py,c,cpp,sql,sh,bat,m,bas,prg,cmd
文本预览效果如下

2. 图片预览 #

支持jpg,jpeg,png,gif等图片预览(翻转,缩放,镜像),预览效果如下

3. word文档预览 #

支持doc,docx文档预览,word预览有两种模式:一种是每页word转为图片预览,另一种是整个word文档转成pdf,再预览pdf。两种模式的适用场景如下

  • 图片预览:word文件大,前台加载整个pdf过慢
  • pdf预览:内网访问,加载pdf快
    图片预览模式预览效果如下


4. ppt文档预览 #

支持ppt,pptx文档预览,和word文档一样,有两种预览模式
图片预览模式预览效果如下

5. 多媒体文件预览 #

理论上支持所有的视频、音频文件,由于无法枚举所有文件格式,默认开启的类型如下
mp3,wav,mp4,flv
如有没有未覆盖全面,可通过配置文件指定多媒体类型
视频预览效果如下

相关推荐

redis的八种使用场景

前言:redis是我们工作开发中,经常要打交道的,下面对redis的使用场景做总结介绍也是对redis举报的功能做梳理。缓存Redis最常见的用途是作为缓存,用于加速应用程序的响应速度。...

基于Redis的3种分布式ID生成策略

在分布式系统设计中,全局唯一ID是一个基础而关键的组件。随着业务规模扩大和系统架构向微服务演进,传统的单机自增ID已无法满足需求。高并发、高可用的分布式ID生成方案成为构建可靠分布式系统的必要条件。R...

基于OpenWrt系统路由器的模式切换与网页设计

摘要:目前商用WiFi路由器已应用到多个领域,商家通过给用户提供一个稳定免费WiFi热点达到吸引客户、提升服务的目标。传统路由器自带的Luci界面提供了工厂模式的Web界面,用户可通过该界面配置路...

这篇文章教你看明白 nginx-ingress 控制器

主机nginx一般nginx做主机反向代理(网关)有以下配置...

如何用redis实现注册中心

一句话总结使用Redis实现注册中心:服务注册...

爱可可老师24小时热门分享(2020.5.10)

No1.看自己以前写的代码是种什么体验?No2.DooM-chip!国外网友SylvainLefebvre自制的无CPU、无操作码、无指令计数器...No3.我认为CS学位可以更好,如...

Apportable:拯救程序员,IOS一秒变安卓

摘要:还在为了跨平台使用cocos2d-x吗,拯救objc程序员的奇葩来了,ApportableSDK:FreeAndroidsupportforcocos2d-iPhone。App...

JAVA实现超买超卖方案汇总,那个最适合你,一篇文章彻底讲透

以下是几种Java实现超买超卖问题的核心解决方案及代码示例,针对高并发场景下的库存扣减问题:方案一:Redis原子操作+Lua脚本(推荐)//使用Redis+Lua保证原子性publicbo...

3月26日更新 快速施法自动施法可独立设置

2016年3月26日DOTA2有一个79.6MB的更新主要是针对自动施法和快速施法的调整本来内容不多不少朋友都有自动施法和快速施法的困扰英文更新日志一些视觉BUG修复就不翻译了主要翻译自动施...

Redis 是如何提供服务的

在刚刚接触Redis的时候,最想要知道的是一个’setnameJhon’命令到达Redis服务器的时候,它是如何返回’OK’的?里面命令处理的流程如何,具体细节怎么样?你一定有问过自己...

lua _G、_VERSION使用

到这里我们已经把lua基础库中的函数介绍完了,除了函数外基础库中还有两个常量,一个是_G,另一个是_VERSION。_G是基础库本身,指向自己,这个变量很有意思,可以无限引用自己,最后得到的还是自己,...

China&#39;s top diplomat to chair third China-Pacific Island countries foreign ministers&#39; meeting

BEIJING,May21(Xinhua)--ChineseForeignMinisterWangYi,alsoamemberofthePoliticalBureau...

移动工作交流工具Lua推出Insights数据分析产品

Lua是一个适用于各种职业人士的移动交流平台,它在今天推出了一项叫做Insights的全新功能。Insights是一个数据平台,客户可以在上面实时看到员工之间的交流情况,并分析这些情况对公司发展的影响...

Redis 7新武器:用Redis Stack实现向量搜索的极限压测

当传统关系型数据库还在为向量相似度搜索的性能挣扎时,Redis7的RedisStack...

Nginx/OpenResty详解,Nginx Lua编程,重定向与内部子请求

重定向与内部子请求Nginx的rewrite指令不仅可以在Nginx内部的server、location之间进行跳转,还可以进行外部链接的重定向。通过ngx_lua模块的Lua函数除了能实现Nginx...