先看下官方文档:kkFileView - 在线文件预览
环境要求中的JDK8如果没有的,需先安装JDK8,这里不做展示。
第二个office相关环境要求在linux中会自动下载安装,不用管。
1、下载地址
Linux 或 MacOS 版:
https://kkfileview.keking.cn/kkFileView-4.1.0.tar.gz
Windows版
https://kkfileview.keking.cn/kkFileView-4.1.0.zip
Docker 离线文件
https://kkfileview.keking.cn/kkFileView-4.1.0-docker.tar
当然也可以通过其他方式获取安装包,这里略过。
以下以linux下安装为例进行安装部署
2、解压
自行选择目录
tar -zxvf kkFileView-4.1.0.tar.gz
3、修改配置
解压后的文件,/root/kkFileView-4.1.0/config/application.properties
这里的大部分配置使用默认配置即可,也可以根据实际需求进行修改,如服务器做了端口限制,可以在这里修改kkFileView的启动端口(默认启动端口为8012)
#server.port = ${KK_SERVER_PORT:8012}
server.port = ${KK_SERVER_PORT:8107}
4、启动
/root/kkFileView-4.1.0/bin
sh ./startup.sh
顺利的话可以通过日志/root/kkFileView-4.1.0/log/kkFileView.log看到kkFileView服务已正常启动。
当然了,一般都不会正常!
5、启动遇到的问题
问题关键日志:
启动报错:kkFileView启动office组件失败,请检查office组件是否可用
详细日志:
这里详细日志的最后部分Caused by: java.lang.IllegalStateException: a process with acceptString 'socket,host=127.0.0.1,port=2001' is already running; pid 95162迷惑性很强,给人端口占用的错觉,但是实际上这里跟端口占用没关系,主要的问题是office组件问题(呵呵)。
但是前面的官方文档已经指出,Linux不需要单独安装office组件,会自动安装,那这里怎么会报错呢?
一开始我也以为是office组件问题,百度了很多都是从组件问题出发解决问题,而忽略了正确答案,我这里是通过xshell远程连接服务器进行kk服务启动,xshell弹出提示
一开始没有在意这个,以为只是xshell的提示而已,就选择了否关闭了这个弹框。后面依然是按照组件问题百度,结果一直没有解决,后面尝试按照这个弹框的提示关闭了会话属性,kkFileView服务就启动成功了。。。。有知道原因的大神解释下为什么!!!
6、Nginx代理问题
nginx代理后,图片能正常预览,但是pdf等文件预览失败
在nginx中加了以下代理:
location /kkFileView/ { proxy_pass http://ip:8107/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Content-Type $upstream_http_content_type; proxy_set_header Content-Length $upstream_http_content_length; proxy_set_header Content-Disposition $upstream_http_content_disposition; proxy_redirect off; } |
我的kk服务启动端口是8107,nginx监听端口为8106
当访问未经过nginx代理的url时,图片预览正常
http://ip:8107/onlinePreview?url=aHR0cDovLzEwLjIwLjE2LjE2Njo4MTA2L2xjbXMvZmlsZS9zZXJ2ZXIvc3RhdGljLzY3MzQ3Njc4Yjc2MDNmZWQ2YTgwNTQ4NS5qcGc%3D
当访问经过nginx代理的url时,图片预览也正常
http://ip:8106/kkFileView/onlinePreview?url=aHR0cDovLzEwLjIwLjE2LjE2Njo4MTA2L2xjbXMvZmlsZS9zZXJ2ZXIvc3RhdGljLzY3MzQ3Njc4Yjc2MDNmZWQ2YTgwNTQ4NS5qcGc%3D
但当预览pdf等其他文件时就出现了异常
当访问未经过nginx代理的url时,pdf文件预览正常
当访问经过nginx代理的url时,就出现了异常
根据我们的nginx配置,当访问
http://ip:8106/kkFileView/onlinePreview?url=aHR0cDovLzEwLjIwLjE2LjE2Njo4MTA2L2xjbXMvZmlsZS9zZXJ2ZXIvc3RhdGljLzY3MzU3MWE4Yjc2MDNmZWQ2YTgwNTQ4Ni5wZGY%3D&officePreviewType=pdf&tifPreviewType=jpg&tifPreviewType=jpg
(最后这里是jpg是因为kk默认将office类型文档,默认为图片,可配置为pdf(预览时也有按钮切换))时,这里应该被代理到
http://ip:8107/onlinePreview?url=aHR0cDovLzEwLjIwLjE2LjE2Njo4MTA2L2xjbXMvZmlsZS9zZXJ2ZXIvc3RhdGljLzY3MzU3MWE4Yjc2MDNmZWQ2YTgwNTQ4Ni5wZGY%3D&officePreviewType=pdf&tifPreviewType=jpg&tifPreviewType=jpg
但是从浏览器调试看这里被转到了80端口,这里明显出现了问题,这是因为当使用nginx代理时,也需要在kkFileView的配置中做相对应的修改
修改kk配置后重启kk服务,重新访问代理后的url即可正常预览pdf等其他文件了。
ps补充=============
直接关闭xshell弹窗与设置X11转发执行结果不同,后面我问了通义千问,以下是千问的回答:
问:在xshell执行启动脚本时,xshell会弹出提示:需要Xmanger软件来处理X11转发请求。。。我直接关闭这个弹框就会启动报错,当我按照弹框提示关闭隧道页面中的X11转发选项就可以正常执行,难道xshell的弹框及X11转发选项会影响远程脚本的执行?
答:
是的,XShell 的 X11 转发选项确实会影响远程脚本的执行,特别是当涉及到图形界面应用程序时。在这种情况下,soffice
尝试启动时可能会请求 X11 转发,而如果没有正确配置 X11 转发,会导致启动失败。
解释
-
X11 转发:
- X11 转发允许远程服务器上的图形应用程序在本地机器上显示其图形界面。
- 当 X11 转发启用时,XShell 会尝试通过 X11 转发协议将图形界面数据传输到本地机器。
- 如果远程应用程序不需要图形界面(如
soffice --headless
),但仍然请求 X11 转发,可能会导致启动失败或出现错误提示。
-
关闭 X11 转发:
- 关闭 X11 转发可以避免不必要的图形界面请求,从而确保命令行应用程序正常运行。
解决方案
-
关闭 X11 转发:
- 在 XShell 中,关闭 X11 转发选项。
- 具体步骤如下:
- 打开 XShell。
- 选择您的会话,右键点击并选择“属性”。
- 在“属性”窗口中,导航到“隧道”选项卡。
- 取消选中“X11 转发”复选框。
- 点击“确定”保存更改。