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;

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/551547.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微前端 qiankun 框架接入问题记录

背景&#xff1a;需要搭建一个平台&#xff0c;这个平台的主要功能是集成各个子系统&#xff0c;方面对系统之间的统一管理。在搭建这样一个平台时&#xff0c;前端考虑使用微前端架构方式实现&#xff0c;使用的框架是 qiankun&#xff0c;本文主要记录在 qiankun 框架使用过程…

postman汉化

一、postman历史版本下载&#xff1a;Postman 10.24.16 Download for Windows / Old Versions / FileHorse.comhttps://www.filehorse.com/download-postman/old-versions/ 二、汉化包下载&#xff1a; Releases hlmd/Postman-cn GitHubPostman汉化中文版. Contribute to h…

弹性 MapReduce(EMR)

一.产品简介 1产品概述 E腾讯云 EMR 提供基于云服务器&#xff08;CVM&#xff09;和容器服务&#xff08;TKE&#xff09;两种部署运行方式&#xff1a; 2.Agent 的安装目录 Linux 安装目录是/usr/local/qcloud/stargate和/usr/local/qcloud/monitor CoreOs 安装目录是/va…

【Redis 神秘大陆】006 灾备方案

六、Redis 灾备方案 6.1 存储方案 6.1.1 基础对比 RDB持久化AOF持久化原理周期性fork子进程生成持久化文件每次写入记录命令日志文件类型二进制dump快照文件文本appendonly日志文件触发条件默认超过300s间隔且有1s内超过1kb数据变更永久性每秒fsync一次文件位置配置文件中指…

ECharts数据大屏展示效果

ECharts数据大屏展示效果 前言1、效果预览1.2、视频效果 2、使用框架3、如何处理屏幕自适应效果4、ECharts模块、dataV大屏插件 编写与布局5、往期回顾总结&#xff1a; 前言 数据大屏需整体效果好看&#xff0c;界面缩放自适应大小&#xff0c;全屏展示铺满整个屏幕并自适应&a…

Linux 指令之文件

1.开发背景 记录 linux 下对文件操作的指令 2.开发需求 记录常用的文件操作指令 3.开发环境 linux 操作系统&#xff0c;如果不支持需要查看是否存在对应的可执行文件 4.实现步骤 4.1 查找字符串 查找指定目录下包含指定的字符串 grep -rn "Timer frequency" .…

怎么在桌面上添加待办清单 好用的桌面待办清单工具

在这个信息爆炸的时代&#xff0c;我们每个人都像是身处信息的洪流中&#xff0c;稍有不慎就可能被淹没。我常常被各种琐事包围&#xff0c;需要完成的任务数不胜数&#xff0c;而大脑的内存似乎总是有限。有时&#xff0c;我甚至会忘记一些重要的事项&#xff0c;这让我感到非…

记录一个解决win11安装天融信VPN蓝屏解决方法

当我们安装完天融信VPN产品后&#xff0c;有时候会导致电脑蓝屏&#xff01;&#xff01;&#xff01;&#xff01; 解决&#xff1a;默认是这个目录&#xff1a;C:\Windows\SysWOW64\drivers 把TopsecPF.sys 名称 改成TopsecPF.sys1就ok了

谈谈微前端

相关问题 为什么要用微前端微前端的优缺点 回答关键点 独立开发 独立运行 独立部署 自治 微前端是一种架构理念&#xff0c;它将较大的前端应用拆分为若干个可以独立交付的前端应用。这样的好处是每个应用大小及复杂度相对可控。在合理拆分应用的前提下&#xff0c;微前端能…

构建有序链表,有序链表的归并,反转链表

本次将对于构建有序链表&#xff0c;有序链表的归并&#xff0c;反转链表&#xff0c;进行一一介绍和代码分享。 首先是一些链表中的基本的函数&#xff1a; Node* creatList() {Node* headNode (Node*)malloc(sizeof(Node));assert(headNode);headNode->next NULL;retu…

AJAX (异步的JavaScript 和 XML)

目录 1、什么是AJAX 2、作用 1&#xff09;与服务器通信 2&#xff09;异步交互&#xff08;更新局部页面&#xff09; 3、AJAX 的基本工作原理 4、应用举例 5、jQuery与AJAX 6、使用jQeury实现AJAX 1&#xff09;$.ajax()&#xff1a;发送异步请求 2&#xff09;$.g…

LeetCode-924. 尽量减少恶意软件的传播【深度优先搜索 广度优先搜索 并查集 图 哈希表】

LeetCode-924. 尽量减少恶意软件的传播【深度优先搜索 广度优先搜索 并查集 图 哈希表】 题目描述&#xff1a;解题思路一&#xff1a;解题思路二&#xff1a;0解题思路三&#xff1a;0 题目描述&#xff1a; 给出了一个由 n 个节点组成的网络&#xff0c;用 n n 个邻接矩阵图…

Ubuntu:VSCode中编译运行C++代码

版本&#xff1a;Ubuntu22.04.1 LTS 目录 1 安装VSCode并汉化 2 检查Ubuntu是否已经安装了 GCC 3 在VScode中安装C/C扩展 4 在VSCode中进行C/C配置 1 安装VSCode并汉化 安装VSCode&#xff08;参考之前博客Ubuntu&#xff1a;安装VSCode_ubuntu vscode-CSDN博客&#xff…

面向未来的内容营销:Kompas.ai的趋势预测能力

在这个快速变化的数字时代&#xff0c;内容营销的成功很大程度上取决于能否准确预测并迅速响应未来的趋势。拥有前瞻性的内容策略能够让品牌在竞争中占据优势&#xff0c;与受众建立更深层次的联系。本文将深入探讨预测未来趋势在内容营销战略中的价值&#xff0c;分析Kompas.a…

【LeetCode刷题记录】54. 螺旋矩阵

54 螺旋矩阵 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5] 示例 2&#xff1a; 输入&#xf…

基于springboot实现知识管理系统项目【项目源码+论文说明】

基于springboot实现知识管理系统演示 摘要 随着信息互联网信息的飞速发展&#xff0c;无纸化作业变成了一种趋势&#xff0c;针对这个问题开发一个专门适应师生作业交流形式的网站。本文介绍了知识管理系统的开发全过程。通过分析企业对于知识管理系统的需求&#xff0c;创建了…

51单片机学习笔记16 小型直流电机和五线四相电机控制

51单片机学习笔记16 小型直流电机和五线四相电机控制 一、电机分类二、小型直流电机控制1. 简介2. 驱动芯片ULN2003D3. 代码实现dc_motor_utils.cmain.c 三、五线四相步进电机控制1. 步进电机工作原理2. 构造3. 极性区分4. 驱动方式5. 28BYJ-48步进电机&#xff08;1&#xff0…

nextjs渲染篇

1 服务器组件 默认情况下&#xff0c;Next.js 使用服务器组件。 1.1 服务器组件是如何呈现的&#xff1f; 在服务器上&#xff0c;Next.js 使用 React 的 API 来编排渲染。渲染工作被拆分为多个块&#xff1a;按单个路段和Suspense 每个区块分两个步骤呈现&#xff1a; Re…

linux 挂载云盘 NT只能挂载2T,使用parted挂载超过2T云盘

一、删除原来挂载好的云盘和分区 1、查看挂载号的云盘 fdisk -l 发现我们有5千多G但是只挂载了2T&#xff0c;心里非常的慌张&#xff01;十分的不爽&#xff01; 好&#xff0c;我们把它干掉&#xff0c;重新分区&#xff01; 2、解除挂载 umount /homeE 没保存跳转到&…

Oracle 11g完全卸载教程(Windows)

文章目录 一、停止Oracle服务二、卸载Oracle1、卸载Oracle产品2、删除注册表3、删除环境变量以及其余文件 一、停止Oracle服务 进入服务 找到服务中的Oracle服务并且停止 全部停止运行成功 二、卸载Oracle 1、卸载Oracle产品 点击开始菜单找到Oracle&#xff0c;然后点击…