最近为客户开发一个企业OA,需要在线预览各类文档,发现kkFileView提供在线预览的解决方案,而且集成方便。
kkFileView
官网:https://kkfileview.keking.cn
码云:https://gitee.com/kekingcn/file-online-preview
此项目为文件文档在线预览项目解决方案,对标业内付费产品有【永中office】【office365】【idocv】等,在取得公司高层同意后以Apache协议开源出来反哺社区,在此特别感谢@唐老大的支持以及@端木详笑的贡献。该项目使用流行的spring boot搭建,易上手和部署,基本支持主流办公文档的在线预览,如doc,docx,Excel,pdf,txt,zip,rar,图片等等
docker pull keking/kkfileview
docker run -it -p 8012:8012 keking/kkfileview
后台运行
docker run -it -p 8012:8012 -d --name kkfileviwe-demo keking/kkfileview
启动成功:127.0.0.1:8012
可以在此页面进行测试,选择文档上传,在线预览
当您的项目内需要预览文件时,只需要调用浏览器打开本项目的预览接口,并传入须要预览文件的url。
注意,如果要预览的url里包含需要转义的特殊字符,如下表格,请使用encodeURIComponent(url)转义
var url = 'http://127.0.0.1:8080/file/test.txt'; //要预览文件的访问地址
window.open('http://127.0.0.1:8012/onlinePreview?url='+encodeURIComponent(url));
很多系统内不是直接暴露文件下载地址,而是请求通过id、code等参数到通过统一的接口,后端通过id或code等参数定位文件,再通过OutputStream输出下载,此时下载url是不带文件后缀名的,预览时需要拿到文件名,传一个参数fullfilename=xxx.xxx来指定文件名,示例如下
var originUrl = 'http://127.0.0.1:8080/filedownload?fileId=1'; //要预览文件的访问地址
var previewUrl = originUrl + '&fullfilename=test.txt'
window.open('http://127.0.0.1:8012/onlinePreview?url='+encodeURIComponent(previewUrl));
如果要预览的FTP url是可以匿名访问的(不需要用户名密码),则可以直接通过下载url预览,示例如下
var url = 'ftp://127.0.0.1/file/test.txt'; //要预览文件的访问地址
window.open('http://127.0.0.1:8012/onlinePreview?url='+encodeURIComponent(url));
var url = 'ftp://127.0.0.1/file/test.txt'; //要预览文件的访问地址
window.open('http://127.0.0.1:8012/onlinePreview?url='+encodeURIComponent(url));
var originUrl = 'ftp://127.0.0.1/file/test.txt'; //要预览文件的访问地址
var previewUrl = originUrl + '?ftp.username=xx&ftp.password=xx&ftp.control.encoding=xx';
window.open('http://127.0.0.1:8012/onlinePreview?url='+encodeURIComponent(previewUrl));
更多配置参考官网:
https://kkfileview.keking.cn/zh-cn/docs/config.html
前端项目使用集成:
//例子使用比较简洁
//1. 引入base64
let Base64 = require("js-base64").Base64;//
//2.预览文档访问的地址
var url ="var url ="http://192.168.3.68:30666/20210205/1357596931101736962/java面试题整理.docx""
//3.调用kkFileView进行预览
window.open(
"http://192.168.3.68:8012/onlinePreview?url=" + encodeURIComponent(Base64.encode(url))
);