kkFileView文件预览服务详解

2024-04-17 12:52

本文主要是介绍kkFileView文件预览服务详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、介绍

二、地址

三、打包部署步骤

四、三种调用方式

五、在线体验

六、源码分析-设计思路实现

七、扩展新类型

八、遇到的问题

1.混合访问问题

2.邮件解析问题

3. Ng转发配置网站域名问题;

4.Office版本问题

5.指定时区:

6. Office相关(word,ppt,excel)转换一直阻塞超时,无响应

7. kkFileView请求资源时不能带token

8.数据预热

九、配置文件设置

1.项目名: fileview; 配置到ng,需根据项目名做转发; 不然会无法访问

2.Excel转换到前端的格式

3.缓存清理周期

4.信任站点

5.office类型文档(word ppt)样式


一、介绍

  • 为什么存在? 解决什么问题?-在线预览

解决web文件必须下载才能查看的问题, 用户可在浏览器端实时查看(不支持编辑).

  • kkFileView概述

kkFileView项目使用流行的spring boot搭建,易上手和部署。万能的文件预览开源项目,基本支持主流文档格式预览,如:

  • 预览展示

1、文本预览

2、图片预览

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

3、word文档预览

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

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

图片预览模式预览效果如下

pdf预览模式预览效果如下

二、地址

  • 官方文档地址:

https://kkfileview.keking.cn/zh-cn/docs/config.html

文档目录

  • 码云- gitee:

https://gitee.com/kekingcn/file-online-preview

最新稳定发行版是v4.3.0

三、打包部署步骤

1、 打包 : 需拉取代码gitee然后在idea中打包

如缺少依赖: aspose-cad, https://mvnrepository.com/artifact/com.aspose/aspose-cad/23.7

改下maven镜像库地址下载(国内阿里镜像库中没有这个):https://repo.usit.uio.no/nexus/repository/public/

打包成功后文件夹列表:

打包后近300M; 官方建议独立部署运行; 不需要集成到微服务,或其他三方系统内;

此服务无需数据库支持; 缓存用Java集合实现即可;

2、 部署运行

文件预览word,ppt,excel依赖office相关组件; Windows下已内置; Linux下需单独安装;

Windows下可直接在idea中运行 (ServerMain.java);

Linux部署:

1.上传kkFileView-4.4.0-SNAPSHOT.tar.gz到部署目录

2.解压: tar -zxvf kkFileView-4.4.0-SNAPSHOT.tar.gz

3.配置文件在kkFileView-4.4.0-SNAPSHOT/config/application.properties

注意: 每次解压, config会被覆盖, 记得提前备份

4.进入解压后文件夹kkFileView-4.4.0-SNAPSHOT/bin

5.启动: ./startup.sh

备注: Linux下首次启动会自动安装LibreOffice默认安装: 7.5版本;

默认首页如下: http://127.0.0.1:8012

更新重启:

1、进入bin目录:

2、先执行./shutdown.sh;

3、更新jar或修改配置文件后,

4、再执行./startup.sh 即可

四、三种调用方式

1.普通文件下载url预览

<script type="text/javascript"src="https://cdn.jsdelivr.net/npm/js-base64@3.6.0/base64.min.js"></script>
varurl = 'http://127.0.0.1:8080/file/test_.txt'; //要预览文件的访问地址 
window.open('http://127.0.0.1:8012/onlinePreview?url='+encodeURIComponent(Base64.encode(url)));

2.http/https下载流url预览

<script type="text/javascript"src="https://cdn.jsdelivr.net/npm/js-base64@3.6.0/base64.min.js"></script>
varoriginUrl = 'http://127.0.0.1:8080/filedownload?fileId=1'; //要预览文件的访问地址 
varpreviewUrl = originUrl + '&fullfilename=test.txt';
window.open('http://127.0.0.1:8012/onlinePreview?url='+encodeURIComponent(Base64.encode(previewUrl)));

3.FTP方式

<script type="text/javascript"src="https://cdn.jsdelivr.net/npm/js-base64@3.6.0/base64.min.js"></script>
varurl = 'ftp://127.0.0.1/file/test.txt'; //要预览文件的访问地址 
window.open('http://127.0.0.1:8012/onlinePreview?url='+encodeURIComponent(Base64.encode(url)));

五、在线体验

可自行尝试上传并预览: https://file.kkview.cn/

六、源码分析-设计思路实现

onlinePreview: 为统一预览入口

预览统一入口代码:

基本实现思路: 代码抽象框架图

Excel 转成 html

Word 转出 pdf / image

七、扩展新类型

根据源码分析, 自己尝试新扩展支持一种ddd类型文件。只需要四步即可。

1.新增文件类型

2.配置文件预览模板

3.文件转换后端代码实现

4.前端展示模板代码

5.展示效果如图

八、遇到的问题

1.混合访问问题

因为业务系统是https, 谷歌浏览器限制https下访问http的内容时会提示上图错误;

图片预览是用window.open的方式重新打开的页面;

故可以统一用http; 也可以统一用https;

最终用https方案: 请求预览资源统一走后端download接口; kkfileview也在ng中加https;

说明下kkfileview预览交互大致流程,大概分三类:

第一类是不需要转换的, 如图片,pdf;

  1. 先请求kkfileview, 判断是图片/pdf则返回对应预览前端组件到浏览器;
  2. 浏览器渲染预览组件, 并直接请求图片/pdf的源地址并预览;

第二类是需要转换的, 如word, excel, 压缩包;

  1. 先请求kkfileview, 判断是word/压缩包则通过java.net.URL获取资源并转换成对应的预览格式(word可指定转换成image/pdf), 然后返回对应预览前端组件到浏览器
    Word -- 需安装插件(openoffice) --> pdf
    Word -- 需安装插件(openoffice) --> pdf --> image
  2. 浏览器渲染预览组件, 并请求转换后的地址(即kkfileview的服务地址)并预览;

第三类 普通文本, 一次请求直接返回在模板中展示;

总体原则: 把复杂多变的输出为不可变的,然后展示

所以, 预览图片/pdf时, 在一个页面会出现两种请求头: kkfileview地址 和 文件源地址;

如果打开是https, 但访问的内容是http的就会出现混合访问Mixed Content错误

2.邮件解析问题

备注: 邮件eml正文无法解析复杂格式; 邮件抬头和附件可正常解析并下载; (邮件展示的样式产品也不满意)

邮件eml本质是转码加密的文本, 后端不做处理; 全靠前端按指定格式解码

msg 也不支持: MSG文件是一种邮件格式,通常用于微软Outlook邮件客户端;

Eml各类电子邮件软件的通用格式,其格式名由来是E-mail(电子邮件)的缩写形式。

3. Ng转发配置网站域名问题;

提供预览服务的地址,默认从接收请求url读,如果使用nginx等反向代理,需要手动设置为通过nginx访问预览服务的地址; 不然,浏览器端再次请求kkFileView服务时调用地址就会用默认的IP+端口导致服务不可用;

4.Office版本问题

Windows下已内置,Linux需自行安装;

kkFileView 最新代码 默认安装: LibreOffice7.5版本;

测试uat环境: Linux版本是企业版6.7 无法安装LibreOffice

无法安装LibreOffice7.5, LibreOffice7.1也不能安装; 提示缺少依赖;

最后降低版本, 用的OpenOffice 4安装成功;

生产环境 centos7 可直接安装成功LibreOffice7.5

对比:

LibreOffice7是OpenOffice4升级和改进版; LibreOffice更强大,功能更全面;

两款对比展示有些差异: 但并不影响使用: 下图上半部分是OpenOffice4转换后的结果; 下半部分是LibreOffice7;

OpenOffice4的问题:

测试环境下OpenOffice4 转换office有转换失败的概率, 但多尝试几次都可成功 (改了源码: 尝试循环转换6次);

生产环境下LibreOffice7.5转换office都是一次即成功;

5.指定时区:

启动时指定时区, 不然日志差了八个小时;

6. Office相关(word,ppt,excel)转换一直阻塞超时,无响应

需查看服务器上office服务是否在运行中, 如无服务, 需重启kkFileView

默认开始2001,2002两个office转换服务,如下:

7. kkFileView请求资源时不能带token

无法下载带鉴权的接口内容; 故后端download接口放开权限都可以访问了;

8.数据预热

通过接口方式: 加入转换队列中; 对应后端/addTask接口

九、配置文件设置

配置文件application.properties位置在解压后的config文件夹中;

注意:每次解压,配置文件会被覆盖, 记得提前备份;

1.项目名: fileview; 配置到ng,需根据项目名做转发; 不然会无法访问

2.Excel转换到前端的格式

默认是web(浏览器端可编辑); 改为html后浏览器端不可编辑了(产品需要的)

3.缓存清理周期

定期删除转换的缓存文件;(改为用id做唯一标识,同名文件也不会相互覆盖)

4.信任站点

只允许预览此站点下的文件;

5.office类型文档(word ppt)样式

默认为图片(image),可配置为pdf(预览时也有按钮切换)

image适用于外网环境,少量多次请求; pdf适用于内网,一次下载pdf;

以上就是本期文章的全部内容~

作者:刘金龙| 资深后端开发工程师

版权声明:本文由神州数码云基地团队整理撰写,若转载请注明出处。

公众号搜索神州数码云基地,后去更多技术干货。

这篇关于kkFileView文件预览服务详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/911853

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

嵌入式Openharmony系统构建与启动详解

大家好,今天主要给大家分享一下,如何构建Openharmony子系统以及系统的启动过程分解。 第一:OpenHarmony系统构建      首先熟悉一下,构建系统是一种自动化处理工具的集合,通过将源代码文件进行一系列处理,最终生成和用户可以使用的目标文件。这里的目标文件包括静态链接库文件、动态链接库文件、可执行文件、脚本文件、配置文件等。      我们在编写hellowor

LabVIEW FIFO详解

在LabVIEW的FPGA开发中,FIFO(先入先出队列)是常用的数据传输机制。通过配置FIFO的属性,工程师可以在FPGA和主机之间,或不同FPGA VIs之间进行高效的数据传输。根据具体需求,FIFO有多种类型与实现方式,包括目标范围内FIFO(Target-Scoped)、DMA FIFO以及点对点流(Peer-to-Peer)。 FIFO类型 **目标范围FIFO(Target-Sc

019、JOptionPane类的常用静态方法详解

目录 JOptionPane类的常用静态方法详解 1. showInputDialog()方法 1.1基本用法 1.2带有默认值的输入框 1.3带有选项的输入对话框 1.4自定义图标的输入对话框 2. showConfirmDialog()方法 2.1基本用法 2.2自定义按钮和图标 2.3带有自定义组件的确认对话框 3. showMessageDialog()方法 3.1

脏页的标记方式详解

脏页的标记方式 一、引言 在数据库系统中,脏页是指那些被修改过但还未写入磁盘的数据页。为了有效地管理这些脏页并确保数据的一致性,数据库需要对脏页进行标记。了解脏页的标记方式对于理解数据库的内部工作机制和优化性能至关重要。 二、脏页产生的过程 当数据库中的数据被修改时,这些修改首先会在内存中的缓冲池(Buffer Pool)中进行。例如,执行一条 UPDATE 语句修改了某一行数据,对应的缓