本博客只涉及部分核心操作,不是保姆级教学,希望你也能有自己的思路,感悟破局的乐趣。
背景
在日常办公中,文件预览是一个高频且重要的需求。传统的文件预览方案往往存在格式支持有限、体验不佳等问题。泛微E9自带的文档预览功能虽然基础,但在面对复杂格式或特殊需求时往往力不从心。
今天给大家介绍如何通过集成开源的kkfileview项目,为泛微E9打造一个强大、统一的文档预览解决方案。
功能亮点
- 多格式支持:支持Office、PDF、图片、视频、音频等常见格式
- 无缝集成:与泛微E9原有文档模块完美融合
- 零客户端:基于Web的纯前端预览,无需安装任何插件
- 高性能:基于Spring Boot构建,响应迅速
- 开源免费:基于Apache 2.0协议,可自由使用和修改
实施步骤
第一步:部署kkfileview服务
丸子采用的是从官方GitHub下载源码并自行编译打包的方式。如果你不想自己打包,可以私信丸子获取编译好的版本(有时间的话会分享)。
启动成功后访问演示页:
访问成功界面:
第二步:泛微E9文档功能改造
核心工具类
首先创建一个工具类,用于生成文件下载的ddcode(这是泛微文档外发的核心知识):
package com.onestools;
import weaver.docs.docs.util.DesUtils;
public class getFileDownloadUrl {
/**
* 根据文件ID生成临时下载URL
* @param fileid 文件ID
* @return 下载URL
*/
public static String getFileDownloadUrl(int fileid) {
try {
String encrypt = new DesUtils().encrypt(1 + "_" + fileid);
return "/weaver/weaver.file.FileDownload?fileid=" + fileid + "&download=1&ddcode=" + encrypt;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 根据文件ID和基础URL生成临时下载URL
* @param fileid 文件ID
* @param baseurl 基础URL
* @return 下载URL
*/
public static String getFileDownloadUrl(int fileid, String baseurl) {
try {
String encrypt = new DesUtils().encrypt(1 + "_" + fileid);
return baseurl + "/weaver/weaver.file.FileDownload?fileid=" + fileid + "&download=1&ddcode=" + encrypt;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
JSP页面改造
在ecology目录下/docs/e9/index2file.jsp
中增加kkfileview预览逻辑:
增加引用:
<%@ page import="com.onestools.getFileDownloadUrl" %>
<%@ page import="sun.misc.BASE64Encoder" %>
添加kkfileview预览逻辑:
// 现在检查kkfileview配置
boolean useKKFileView = "1".equals(rs.getPropValue("kkfileview","IsUsekkFileView"));
String kkFileViewUrl = rs.getPropValue("kkfileview","kkFileViewUrl"); // kkfileview服务地址
String e9BaseUrl = rs.getPropValue("kkfileview","E9BaseUrl"); // E9基础URL
if(useKKFileView && !isEdit) {
// KKFileView预览逻辑
if(!"".equals(Util.null2String(kkFileViewUrl)) && !"".equals(Util.null2String(e9BaseUrl))) {
try {
// 使用getFileDownloadUrl工具类生成下载链接
String originUrl = getFileDownloadUrl.getFileDownloadUrl(imagefileId, e9BaseUrl);
String previewUrl = originUrl + "&fullfilename=" + java.net.URLEncoder.encode(imagefilename, "UTF-8");
// Base64编码previewUrl
String base64Url = new BASE64Encoder().encode(previewUrl.getBytes("UTF-8"));
// 生成最终的iframe地址
docContent = "<iframe id=\"officeShow\" src=\""+kkFileViewUrl+"/onlinePreview?url="+java.net.URLEncoder.encode(base64Url, "UTF-8")+"\" style=\"display: block;width: 100%;height: 100%; border:0\"></iframe>";
} catch (Exception e) {
// 如果kkfileview出错,继续使用原有逻辑
e.printStackTrace();
}
}
}
第三步:系统配置
在ecology目录下/WEB-INF/prop
新建kkfileview.properties
增加以下内容:
# 是否开启kkfileview
IsUsekkFileView=1
# kkfileview的外部访问地址
kkFileViewUrl=http://192.168.31.130:8012/kkpreview
# 相对于kkfileview访问E9的地址(建议内网地址)
E9BaseUrl=http://127.0.0.1:8080
注意事项
- 安全性考虑:该方案的安全性和稳定性暂未经过全面评估,请在生产环境使用前进行充分测试
- 性能优化:大量并发预览时可能需要考虑kkfileview的集群部署
- 文件大小:超大文件预览时需要注意网络传输和服务器性能
- 移动端适配:本示例只处理了index2file.jsp,如需移动端支持,需要对index2mobile.jsp进行类似改造
总结
通过集成kkfileview,我们成功为泛微E9赋予了强大的文档预览能力。这种"破局"思路不仅适用于文档预览,还可以扩展到其他系统功能的增强和改造。
技术只是工具,思路才是关键。希望这个案例能够激发大家更多的创新想法,在现有系统的基础上创造出更多可能性。
温馨提示:本文涉及的技术方案仅供学习参考,请根据实际环境进行评估和测试。如有技术问题,欢迎交流讨论!
[泛微 E9] [ 高阶精华 ] 泛微 E9 新插件:kkfileview,让文件预览 “零门槛” by https://oneszhang.com/archives/177.html
工具类文件放哪?
阅读文章不仔细,捏捏com.onestools.getFileDownloadUrl
大佬牛 但是现在kkfileview有个高危漏洞暂未修复还是挺危险的
是嘟,这种安全性需要把控下