kkFileView在线文件预览搭建
1.kkFileView介绍kkFileView是使用spring boot打造文件文档在线预览项目解决方案,支持doc、docx、ppt、pptx、xls、xlsx、zip、rar、mp4、mp3以及众多类文本如txt、html、xml、java、properties、sql、js、md、json、conf、ini、vue、php、py、bat、gitignore等文件在线预览。中文文档:REA
1.kkFileView介绍
目录
6.3 提示进程已处于运行状态,进程号为XXXX,kill不掉的情况
kkFileView是使用spring boot打造文件文档在线预览项目解决方案,支持doc、docx、ppt、pptx、xls、xlsx、zip、rar、mp4、mp3以及众多类文本如txt、html、xml、java、properties、sql、js、md、json、conf、ini、vue、php、py、bat、gitignore等文件在线预览。
中文文档:README.md · keking/kkFileView - Gitee.com
官方演示:kkFileView演示首页
2.源码下载
github站点:凯京科技 · GitHub
giee站点:keking: 凯京科技
高雄修改版:https://gitee.com/gaoxingzaq/file-online-preview-masterkkFileView 高雄修改版: kkFileView 高雄修改版,官方版:https://gitee.com/kekingcn/file-online-preview, 官方群:433403637, OFFICE在线浏览 , 使用spring boot打造文件文档在线预览项目解决方案,支持doc、docx、ppt、pptx、xls、xlsx、zip、rar、mp4、mp3、ofd、eml以及众
3.项目启动及配置文件
- 下载源码后,导入IDEA,安装相关pom依赖,即可启动。
- 项目启动演示地址为:http://127.0.0.1:8012
- application.properties配置文件(可配置pdf分页、redis、自动清除缓存以及水印等):具体见官方文档介绍
- 可根据项目的需求进行二次开发
4.项目打包及部署
4.1 打包
#直接使用maven打包
cd file-online-preview
mvn clean package -DskipTests
或者使用maven工具打包(打包父模块)
打包完成后,生成4个文件
由于项目需要,需要部署到linux,这个将tar.gz上传至服务器并解压
4.2 部署
解压上传的压缩包
解压成功后,进入到bin文件内,运行startup.sh脚本(OpenOffice或LiberOffice Windows下已内置,CentOS或Ubuntu下会自动下载安装,MacOS下需要自行安装)
如上图,则表示运行成功。如果要停止服务,运行shutdown.sh脚本即可。
反向代理:
示例配置文件如下
location /
{
proxy_pass http://127.0.0.1:8080;
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;
add_header X-Cache $upstream_cache_status;
#Set Nginx Cache
add_header Cache-Control no-cache;
}
4.3 查看日志
cd log
ls
# kkFileView.log kkFileView.log.314824277.formatted README.txt README.txt.29272841.formatted
tail -f -n 100 kkFileView.log
5.项目接入kkFileView
这里以文件流的形式(即接入第三方文件系统)
前端转码:
var originUrl = 'http://127.0.0.0:8080/filedownload?fileId=1'; //要预览文件的访问地址
var previewUrl = originUrl + '&fullfilename=/test.txt';//(由于使用的是高雄修改版,必须在fullfilename后面加反斜杠)
window.open('http://127.0.0.1:8012/onlinePreview?url='+encodeURIComponent(Base64.encode(previewUrl)));
后端转码(业务需要,在后端进行base64转码):
String url = "文件下载地址" +"&fullfilename=/"+文件名;
Base64.Encoder encoder = Base64.getEncoder();
byte[] textByte = url.getBytes("UTF-8");
String encodedText = encoder.encodeToString(textByte);
String encodedURL = URIEncoderUtil.encodeURIComponent(encodedText);
URL = "http://127.0.0.0:8012/onlinePreview?url="+ encodedURL;
附上JAVA中类似JS encodeURIComponent()函数的工具类
import java.io.UnsupportedEncodingException;
public class URIEncoderUtil {
public static final String ALLOWED_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.!~*'()";
/**
* Description:
*
* @param str
* @return
* @throws UnsupportedEncodingException
* @see
*/
public static String encodeURI(String str)
throws UnsupportedEncodingException
{
String isoStr = new String(str.getBytes("UTF8"), "ISO-8859-1");
char[] chars = isoStr.toCharArray();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < chars.length; i++ )
{
if ((chars[i] <= 'z' && chars[i] >= 'a') || (chars[i] <= 'Z' && chars[i] >= 'A')
|| chars[i] == '-' || chars[i] == '_' || chars[i] == '.' || chars[i] == '!'
|| chars[i] == '~' || chars[i] == '*' || chars[i] == '\'' || chars[i] == '('
|| chars[i] == ')' || chars[i] == ';' || chars[i] == '/' || chars[i] == '?'
|| chars[i] == ':' || chars[i] == '@' || chars[i] == '&' || chars[i] == '='
|| chars[i] == '+' || chars[i] == '$' || chars[i] == ',' || chars[i] == '#'
|| (chars[i] <= '9' && chars[i] >= '0'))
{
sb.append(chars[i]);
}
else
{
sb.append("%");
sb.append(Integer.toHexString(chars[i]));
}
}
return sb.toString();
}
/**
* Description:
*
* @param input
* @return
* @see
*/
public static String encodeURIComponent(String input)
{
if (null == input || "".equals(input.trim()))
{
return input;
}
int l = input.length();
StringBuilder o = new StringBuilder(l * 3);
try
{
for (int i = 0; i < l; i++ )
{
String e = input.substring(i, i + 1);
if (ALLOWED_CHARS.indexOf(e) == -1)
{
byte[] b = e.getBytes("utf-8");
o.append(getHex(b));
continue;
}
o.append(e);
}
return o.toString();
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
return input;
}
private static String getHex(byte buf[])
{
StringBuilder o = new StringBuilder(buf.length * 3);
for (int i = 0; i < buf.length; i++ )
{
int n = (int)buf[i] & 0xff;
o.append("%");
if (n < 0x10)
{
o.append("0");
}
o.append(Long.toString(n, 16).toUpperCase());
}
return o.toString();
}
}
解码工具类
package com.poly.rbl.plugin.uri;
public class URIDecoderUtil
{
/**
*
* Description:
*
* @param encodedURI
* @return
* @see
*/
public static String decodeURIComponent(String encodedURI)
{
char actualChar;
StringBuffer buffer = new StringBuffer();
int bytePattern, sumb = 0;
for (int i = 0, more = -1; i < encodedURI.length(); i++ )
{
actualChar = encodedURI.charAt(i);
switch (actualChar)
{
case '%':
{
actualChar = encodedURI.charAt(++i);
int hb = (Character.isDigit(actualChar) ? actualChar - '0' : 10 + Character.toLowerCase(actualChar) - 'a') & 0xF;
actualChar = encodedURI.charAt(++i);
int lb = (Character.isDigit(actualChar) ? actualChar - '0' : 10 + Character.toLowerCase(actualChar) - 'a') & 0xF;
bytePattern = (hb << 4) | lb;
break;
}
case '+':
{
bytePattern = ' ';
break;
}
default:
{
bytePattern = actualChar;
}
}
if ((bytePattern & 0xc0) == 0x80)
{ // 10xxxxxx
sumb = (sumb << 6) | (bytePattern & 0x3f);
if (--more == 0) buffer.append((char)sumb);
}
else if ((bytePattern & 0x80) == 0x00)
{ // 0xxxxxxx
buffer.append((char)bytePattern);
}
else if ((bytePattern & 0xe0) == 0xc0)
{ // 110xxxxx
sumb = bytePattern & 0x1f;
more = 1;
}
else if ((bytePattern & 0xf0) == 0xe0)
{ // 1110xxxx
sumb = bytePattern & 0x0f;
more = 2;
}
else if ((bytePattern & 0xf8) == 0xf0)
{ // 11110xxx
sumb = bytePattern & 0x07;
more = 3;
}
else if ((bytePattern & 0xfc) == 0xf8)
{ // 111110xx
sumb = bytePattern & 0x03;
more = 4;
}
else
{ // 1111110x
sumb = bytePattern & 0x01;
more = 5;
}
}
return buffer.toString();
}
}
至此,kkFileView服务已搭建完成,以下是在搭建过程中出现的部分问题
6.搭建过程中常见的问题解决
6.1 提示找不到OFFICE组件
运行过程中,可能会出现找不到OFFICE组件错误,如下图
解决:如果运行脚本文件出现这个错误,把安装的openoffice或LibreOffice卸载,再重新运行一遍脚本。
yum remove libreoffice*
重新安装成功后,记得重启服务器以及服务,如若不能解决,见官方文档。
以下是官方解决方案:
1.1、首先安装 开源OFFICE openoffice或LibreOffice 建议安装LibreOffice
1.2、是打开配置文件 路径是 kkFileView-4.0.0\config\application.properties
(1)、指定OFFCIE安装路径 /opt/libreoffice7.1
(2)、如果是手动安装的自行修改自己的路径参考(1)
1.3、运行OFFICE脚本命令 (LibreOffice)
(1)、(/opt/libreoffice7.2/代表脚本路径自行修改)
/opt/libreoffice7.2/program/soffice --headless --accept="socket,host=127.0.0.1,port=2001;urp;" --nofirststartwizard &
(2)、(openoffice4脚本命令)
/opt/openoffice4/program/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &
1.4、看运行脚本提示
(1)、出现ID并没提示错误,表示安装正确
(2)、出现ID并提示错误,请百度搜索错误信息修复错误,再次运行命令知道不在提示错误
6.2 Xshell关闭转发连接
6.3 提示进程已处于运行状态,进程号为XXXX,kill不掉的情况
删除掉bin目录下,kkFileView.pid文件重新执行脚本
6.4 乱码
附上官方解决方案
-
打开bin目录里面的startup.bat加入-Dfile.encoding=UTF-8
-
大部分Linux系统上并没有预装中文字体或字体不全,需要把常用字体拷贝到Linux服务器上,具体操作如下: 下载如下字体包 http://kkfileview.keking.cn/fonts.zip 文件解压完整拷贝到Linux下的 /usr/share/fonts目录。然后依次执行mkfontscale 、mkfontdir 、fc-cache使字体生效。
其他问题,详情见kkFileView官网文档
PS:编辑不易,给个赞~~~
更多推荐
所有评论(0)