Spring Boot+AngularJS+BootStrap实现进度条示例代码


Posted in Javascript onMarch 02, 2017

Spring Boot+AngularJS+BootStrap实现进度条

原理

进度条的原理是在上传文件的时候,当程序运行到某一个部分,往Session中设置一个1到100的值。然后前台再每隔很小的一段时间去请求这个值。

在AngularJS中,$http对象有3种状态,分别是success,progress,error,其中progress方法就会在success方法调用之前(也就是上传完成之前),不断地调用。而我们要做的就是在progress中在添加一个请求,去后台拿我们设置在session中的值。

代码,这里我用了一个插件用来上传文件,叫ng-file-upload

html

<input type="file" data-ng-model="file">

<uib-progress data-ng-show="progress">
  <uib-bar value="progress" type="{{type}}" data-ng-bind="progress + '%'"/>
</uib-progress>
<span class="err" data-ng-show="isShowMsg" data-ng-bind="Msg"></span>
<button class="btn btn-primary" type="button" data-ng-click="upload()">确认</button>

js

Upload.upload(
        {
          url: "",
          data: {
            file: file
          },
          method: 'post'
        }).then(function (res) {
          //这里是success方法
          $scope.isShowMsg = true;
          $scope.Msg = res.data.msg;
          if($scope.Msg == "导入数据不符合格式要求!")
          $scope.type = "progress-bar progress-bar-danger progress-bar-striped";//设置进度条样式
          else {
            $scope.type = "progress-bar progress-bar-success progress-bar-striped";
            $scope.progress = 100;//上传成功之后,将进度条设置为100
          }

        }, function (){
        //这里是error方法
        }, function (){
        //这里是progress方法
        $scope.type = "progress-bar progress-bar-info progress-bar-striped";

        $http({
        url:"",
        method: "get"
        }).success(function (res) {
            $scope.progress = res;//绑定进度条的值
          })
        });

上传部分代码(只需要关注设置session的地方

public Map<String, Object> batchModify(InputStream inputStream,HttpSession session) {
    Map<String, Object> res = new HashMap<>();
    Workbook workbook = null;
    try {
      workbook = Util.createWorkbook(inputStream);
    } catch (InvalidFormatException | IOException e) {
      e.printStackTrace();
    }
    session.setAttribute("progress", 5);//解析成功后我将进度设置为5
    Sheet sheet = workbook.getSheetAt(0);

    Map<String, Object> roleWithPages = new HashMap<>();
    for (int i = 1; i <= sheet.getLastRowNum(); i++) {
      Row r = sheet.getRow(i);
      if (r == null || r.getCell(0) == null || r.getCell(1) == null)
        continue;
      Set<Page> pages = null;
      if (roleWithPages.get(r.getCell(0).toString()) == null) {
        pages = new HashSet<>();
      } else {
        pages = (Set<Page>) roleWithPages.get(r.getCell(0).toString());
      }
      Page p = new Page();
      p.setId(Math.round(r.getCell(1).getNumericCellValue()));
      pages.add(p);
      roleWithPages.put(r.getCell(0).toString(), pages);
      session.setAttribute("progress", 5 + i*90/sheet.getLastRowNum());
      //我将处理文件主体进度总量设置为90(5是加上解析部分的进度)
    }

    List<Role> roles = new ArrayList<>();
    for (String rolename : roleWithPages.keySet()) {
      Role role = repo.findByName(rolename);
      role.setPages((Set<Page>) roleWithPages.get(rolename));
      roles.add(role);
    }
    repo.save(roles);
    session.setAttribute("progress", 100);//保存之后将进度设置为100
    res.put("msg", "数据导入成功!");
    return res;
  }

进度条部分代码,很简单,就是读Session中progress的值

public int getProgress(HttpServletRequest request){
    return (int) request.getSession().getAttribute("progress");
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery+CSS 实现的超Sexy下拉菜单
Jan 17 Javascript
jQuery 位置函数offset,innerWidth,innerHeight,outerWidth,outerHeight,scrollTop,scrollLeft
Mar 23 Javascript
JS教程:window.location使用方法的区别介绍
Oct 04 Javascript
关于js数组去重的问题小结
Jan 24 Javascript
详解JavaScript的回调函数
Nov 20 Javascript
JQuery对ASP.NET MVC数据进行更新删除
Jul 13 Javascript
jQuery为DOM动态追加事件的方法
Feb 16 Javascript
js实现图片放大展示效果
Aug 30 Javascript
vue微信分享 vue实现当前页面分享其他页面
Dec 02 Javascript
vue element中axios下载文件(后端Python)
May 10 Javascript
Node.js从字符串生成文件流的实现方法
Aug 18 Javascript
vue实现按钮切换图片
Jan 20 Vue.js
纯js仿淘宝京东商品放大镜功能
Mar 02 #Javascript
JSONP跨域请求
Mar 02 #Javascript
jquery easyui dataGrid动态改变排序字段名的方法
Mar 02 #Javascript
JavaScript正则替换HTML标签功能示例
Mar 02 #Javascript
如何正确理解javascript的模块化
Mar 02 #Javascript
jquery实现左右滑动式轮播图
Mar 02 #Javascript
如何写好你的JavaScript【推荐】
Mar 02 #Javascript
You might like
php笔记之:数据类型与常量的使用分析
2013/05/14 PHP
PHP嵌套输出缓冲代码实例
2015/05/12 PHP
学习PHP的数组总结【经验】
2016/05/05 PHP
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
不懂JavaScript应该怎样学
2008/04/16 Javascript
jquery实现无刷新验证码的简单实例
2016/05/19 Javascript
浅析BootStrap栅格系统
2016/06/07 Javascript
Javascript中常见的逻辑题和解决方法
2016/09/17 Javascript
JS解决移动web开发手机输入框弹出的问题
2017/03/31 Javascript
JavaScript创建对象的七种方式全面总结
2017/08/21 Javascript
基于Vuex无法观察到值变化的解决方法
2018/03/01 Javascript
微信小程序自定义组件实现tabs选项卡功能
2018/07/14 Javascript
JavaScript实现正则去除a标签并保留内容的方法【测试可用】
2018/07/18 Javascript
JavaScript常用数组操作方法,包含ES6方法
2020/05/10 Javascript
vue-music 使用better-scroll遇到轮播图不能自动轮播问题
2018/12/03 Javascript
NodeJs生成sitemap站点地图的方法示例
2019/06/11 NodeJs
jQuery AJAX应用实例总结
2020/05/19 jQuery
Vue过滤器,生命周期函数和vue-resource简单介绍
2021/01/12 Vue.js
python实现的登录和操作开心网脚本分享
2014/07/09 Python
python实现简单socket程序在两台电脑之间传输消息的方法
2015/03/13 Python
Python2.x版本中maketrans()方法的使用介绍
2015/05/19 Python
Python生成随机密码的方法
2017/06/16 Python
python判断文件夹内是否存在指定后缀文件的实例
2019/06/10 Python
python 基于dlib库的人脸检测的实现
2019/11/08 Python
python+adb命令实现自动刷视频脚本案例
2020/04/23 Python
Ubuntu权限不足无法创建文件夹解决方案
2020/11/14 Python
一款纯css3实现的tab选项卡的实列教程
2014/12/11 HTML / CSS
来自世界上最好大学的在线课程:edX
2018/10/16 全球购物
本科生个人求职自荐信
2013/09/26 职场文书
运动会广播稿100字
2014/01/11 职场文书
老干部工作先进事迹
2014/08/17 职场文书
教师个人教学总结
2015/02/11 职场文书
思品教学工作总结
2015/08/10 职场文书
小学教师教学随笔
2015/08/14 职场文书
LeetCode189轮转数组python示例
2022/08/05 Python
Win10服务主机占用内存怎么办?Win10服务主机进程占用大量内存解决方法
2022/09/23 数码科技