赞
踩
前言
本文呼应SpringBoot+Vue websocket上传文件进度条,带断开连接后处理(心跳)-后端-2,完善功能;
一、先看前端进度效果
二、HTML
废话:根据大家需求改就好了,主要是数据怎么接收,接收后传过来就行了,其他都是次要的,这个是上图的样式,在ELEMENT PLUS网站里有的;
<!--弹出框提示文件进度-->
<el-dialog v-model="dialogVisible" title="" width="70%"
custom-class="el-dialogg" :before-close="handleClose" >
<div style="text-align: center;margin-bottom: 2%"><span>{{this.message}}</span></div>
<el-steps style="margin-left: 15%" :space="500" :active="this.jinud" finish-status="success">
<el-step title="文件上传" />
<el-step title="文件合并" />
<el-step title="文件解压" />
</el-steps>
<div style="">
<el-progress :stroke-width="8" :percentage="this.jindu1" style="margin-top: 10px"/>
<el-progress :stroke-width="8" :percentage="this.jindu2" style="margin-top: 10px"/>
<div><span>验证文件:{{this.text}}</span></div>
</div>
</el-dialog>
三、JS
这个稍微有点多,大家耐心点
data() { return { //弹窗 text:"", message:"", dialogVisible:false, jinud:0, jindu1:0, jindu2:0, //websocoket心跳 nowtime:"", historytime:"", reconnect:"", } }, created() { this. jinduxiugai("55") }, methods: { //这个方法就是断开后怎么重连的心跳 timerWebsocket(){ //关闭websocket this.historytime=setInterval(() => { console.log("心跳检测-----------") this.nowtime=0; ;}, 3*1000); this.reconnect=setInterval(() => { if(this.nowtime==0){ console.log("从新连接!"); this.initWebSocket() } ;}, 20*1000); }, //这个是修改进度,呼应后端文章就是meaasge的值,拿过来后做截取处理,能够得到完成总数量,当前步,然后进行百分比显示; jinduxiugai(value){ let x=value.substring(0,1) if(x==0){ let x0=100/value.substring(value.lastIndexOf(".")+1)*value.substring(value.lastIndexOf("=")+1,value.lastIndexOf(".")) this.jindu1 =parseInt(x0).toFixed(2); if(value.substring(value.lastIndexOf("=")+1,value.lastIndexOf("."))==value.substring(value.lastIndexOf(".")+1)){ this.jinud=1 } }else if(x==1){ let x1 =100/value.substring(value.lastIndexOf(".")+1)*value.substring(value.lastIndexOf("=")+1,value.lastIndexOf(".")) this.jindu2 =parseInt(x1).toFixed(2); if(value.substring(value.lastIndexOf("=")+1,value.lastIndexOf("."))==value.substring(value.lastIndexOf(".")+1)){ this.jinud=2 } }else if(x==2) { this.text=value.substring(value.indexOf(",")+1); }else if(x==3){ this.jinud = 3 }else if(x==5){ console.log("初始化") } }, //websocket主题方法就在下面了------- initWebSocket(){ //初始化weosocket //解释一下,绿色的是IP地址和后端端口;sessionStorage.getItem("username");这个是我连接websocket的ID;后续后端传值过来的时候就是根据ID来判断传给谁的 const wsuri = "ws://10.xxx.xx.xx:8080/wsbSocket/"+sessionStorage.getItem("username"); this.websock = new WebSocket(wsuri); this.websock.onmessage = this.websocketonmessage; this.websock.onopen = this.websocketonopen; this.websock.onerror = this.websocketonerror; this.websock.onclose = this.websocketclose; }, websocketonopen(e){ //连接建立之后执行send方法发送数据 // let actions = {"test":"12345"}; // this.websocketsend(JSON.stringify(actions)); console.log("连接成功") }, websocketonerror(e){ //连接建立失败重连 // this.initWebSocket(); console.log("错误",e) }, websocketonmessage(e){ this.nowtime=1 //数据接收-这里调用修改进度的方法进行进度的实时显示 this.jinduxiugai(e.data) }, websocketclose(e){ //关闭 console.log('断开连接',e); }, //关闭连接 colseConnect(){ //关闭连接同时关闭心跳检测 console.log("关闭连接"); clearInterval(this.historytime); clearInterval(this.reconnect); this.websock.close(); }, //写一个简单的方法进行举例子 //点击按钮选进行websocket连接,同时开启心跳,如果是上传文件的话,就在选文件的时候进行连接 handleChange() { this.initWebSocket() //开启websocket this.timerWebsocket() }, //完成需要监控进度的业务流后需要进行websocket连接断开,因为我们只需要保证他在使用的时候连接,不用的时候就断开释放掉,避免资源浪费,顺带做个1秒延迟; handleChange1() { //关闭websocket setTimeout(() => { console.log("关闭连接!"); this.colseConnect() ;}, 1*1000); }, //我这里再提供一个测试断开的方法,大家可以测试一下断开后,你的后台控制台显示以及前端显示有没有做到重新连接的效果,在button调用这个方法,在你监控进度的时候,点击断开后,查看是否重连就知道生效了没了 test(){ console.log("关闭") this.websock.close(); }, }
可能写的比较乱,大家有不明白的地方直接评论或者私信问我,当然有大佬指教修改的话就更好了,因为目前写的只是功能没问题,其他地方我感觉不是简洁,如果能够进一步优化会更好一点。最后希望能帮到你!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。