当前位置: 首页 > news >正文

springboot+minio+kkfileview实现文件的在线预览

在原来的文章中已经讲述过springboot+minio的开发过程,这里不做讲述。
原文章地址:
https://blog.csdn.net/qq_39990869/article/details/131598884?spm=1001.2014.3001.5501

如果你的项目只是需要在线预览图片或者视频那么可以使用minio自己的预览地址进行,如:
ip+prod/9000/桶名/文件名 即可访问
前提是你需要将你的桶设置为公用的,如果你的桶不是公用的那么你需要看我原来的文章,有一个预览的接口会返回一些凭证,直接将预览接口返回的数据放在浏览器即可访问。

现在的问题是如何我们需要访问的是pdf等文件那么就需要结合kkfileview来实现文件的在线预览。
1.kkfileview安装
这里我是用rancher进行的安装。
在这里插入图片描述
只需要下载最新的或者指定版本的kkfileview镜像即可,并且需要将端口对外映射。

2.访问
搭建完成后只需要输入ip+8012即可访问kkfileview自带的页面。
在这里插入图片描述
可以将上面说的minio的地址输入在这里就可以预览对应的文件了。minio文件地址:ip+prod/9000/桶名/文件名

3.springboot+minio+kkfileview结合预览
前端访问的时候需要访问的地址:
http://ip:8012/onlinePreview?url=
url后面跟的是我们将minio文件地址加密为BASE64后的串,但是有个地方需要注意。
在官网上有说明:
在这里插入图片描述
就是说我们加密的串中如何出现上以上的符合就需要我们进行转义,下面是转义的一个方法。

public  String encodeURIComponent(String s) {String result = null;try {String s1 = s.replaceAll("%", "%25");result = URLEncoder.encode(s1, "UTF-8").replaceAll("\\+", "%2B").replaceAll(" ", "%20").replaceAll("/", "%2F").replaceAll("\\?", "%3F").replaceAll("#", "%23").replaceAll("&", "%26").replaceAll("=", "%3D");} catch (UnsupportedEncodingException e) {result = s;}return result;}
首先我们需要将需要预览的minio的地址进行拼接,将拼接后的地址转为base64,然后调用上面的公用方法将里面的特殊字符进行转义。
String FileUrl= url+hotelDoc.getContentFileUrl();
String encodedString = Base64.getEncoder().encodeToString(FileUrl.getBytes());hotelDoc.setFileUrlBase(encodeURIComponent(encodedString));

这样我们就可以将得到的base64放到url后面即可进行在线预览。
注意点:
如果我们想要用nginx来进行代理那么我们需要将kk中的配置进行修改,我们可以根据环境变量进行修改。
在/opt/kkFileView-4.1.0-SNAPSHOT/config/application.properties文件中有很多的环境变量的配置,这里我们只需要配置两个环境变量即可

KK_BASE_URL和KK_CONTEXT_PATH这两个环境变量。KK_BASE_URL 这个是写你nginx的ip和端口,这里我是https的。如https://127.0.0.1:6555/preview
KK_CONTEXT_PATH这个是写我们在nginx中配置的路由,这里我写的是/previewnginx文件中的配置:
location /preview {
proxy_pass http://ip:8012; //kkfileview的ip和端口
}配置完成后你就可以使用代理去访问了:
https://127.0.0.1:6555/preview/onlinePreview?url=aHR0cDovLzE5MS4x

在这里插入图片描述

官网文档
kkfileview

相关文章:

  • 09 platfrom 设备驱动
  • 【Linux】信号(二)
  • 光伏电站绘制软件的基本方法
  • html标签
  • Swift 序列(Sequence)排序面面俱到 - 从过去到现在(三)
  • 【全部更新完毕】2024全国大学生数据统计与分析竞赛B题思路代码文章教学数学建模-电信银行卡诈骗的数据分析
  • K8s Pod的QoS类
  • 拼接sql字符串工具类
  • AB测试实战
  • Qt5学习笔记
  • HCL模拟器下做M-LAG测试(以及和华为配置对比)-二层架构
  • k8s更改master节点IP
  • Pycharm创建Conda虚拟环境时显示CondaHTTPErOT
  • SpringBoot高手之路-springboot原理篇
  • 【深度学习基础】模型文件介绍
  • 30天自制操作系统-2
  • Apache的基本使用
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • HTTP中的ETag在移动客户端的应用
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • Java多线程(4):使用线程池执行定时任务
  • ng6--错误信息小结(持续更新)
  • SpiderData 2019年2月13日 DApp数据排行榜
  • 服务器从安装到部署全过程(二)
  • 普通函数和构造函数的区别
  • 前端技术周刊 2019-01-14:客户端存储
  • 三栏布局总结
  • 实现菜单下拉伸展折叠效果demo
  • 使用 QuickBI 搭建酷炫可视化分析
  • 鱼骨图 - 如何绘制?
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • #define、const、typedef的差别
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #QT(TCP网络编程-服务端)
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (9)目标检测_SSD的原理
  • (二刷)代码随想录第16天|104.二叉树的最大深度 559.n叉树的最大深度● 111.二叉树的最小深度● 222.完全二叉树的节点个数
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (佳作)两轮平衡小车(原理图、PCB、程序源码、BOM等)
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)程序员技术练级攻略
  • .apk 成为历史!
  • .net CHARTING图表控件下载地址
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .NET IoC 容器(三)Autofac
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .net6Api后台+uniapp导出Excel
  • .ui文件相关