SpringBoot+Vue websocket上传文件进度条,带断开连接后处理(心跳)-前端-2

前言
本文呼应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();
    },
}

可能写的比较乱,大家有不明白的地方直接评论或者私信问我,当然有大佬指教修改的话就更好了,因为目前写的只是功能没问题,其他地方我感觉不是简洁,如果能够进一步优化会更好一点。最后希望能帮到你!

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值