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 相关文章推荐
JavaScript高级程序设计 读书笔记之八 Function类及闭包
Feb 27 Javascript
兼容IE和Firefox火狐的上下、左右循环无间断滚动JS代码
Apr 19 Javascript
基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
May 12 Javascript
js制作支付倒计时页面
Oct 21 Javascript
原生javascript实现的ajax异步封装功能示例
Nov 03 Javascript
js 调用百度分享功能
Feb 27 Javascript
JavaScript基于activexobject连接远程数据库SQL Server 2014的方法
Jul 12 Javascript
vue-resource拦截器设置头信息的实例
Oct 27 Javascript
Vue2.0子同级组件之间数据交互方法
Feb 28 Javascript
详解swipe使用及竖屏页面滚动方法
Jun 28 Javascript
JS实现的贪吃蛇游戏完整实例
Jan 18 Javascript
解决微信小程序中转换时间格式IOS不兼容的问题
Feb 15 Javascript
纯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中全局变量global和$GLOBALS[]的区别分析
2012/08/06 PHP
PHP实现简单搜歌的方法
2015/07/28 PHP
jQuery boxy弹出层插件中文演示及使用讲解
2011/02/24 Javascript
图片上传判断及预览脚本的效果实例
2013/08/07 Javascript
jquery中$(#form :input)与$(#form input)的区别
2014/08/18 Javascript
Vuejs第十三篇之组件——杂项
2016/09/09 Javascript
JavaScript实现点击按钮复制指定区域文本(推荐)
2016/11/25 Javascript
jquery判断页面网址是否有效的两种方法
2016/12/11 Javascript
JavaScript实现简单评论功能
2017/08/17 Javascript
vue-cli3项目展示本地Markdown文件的方法
2019/06/07 Javascript
使用Vue开发自己的Chrome扩展程序过程详解
2019/06/21 Javascript
VUE项目中加载已保存的笔记实例方法
2019/09/14 Javascript
vue中使用element组件时事件想要传递其他参数的问题
2019/09/18 Javascript
微信小程序进入广告实现代码实例
2019/09/19 Javascript
vue3.0中使用postcss-pxtorem的具体方法
2019/11/20 Javascript
Vue数字输入框组件示例代码详解
2020/01/15 Javascript
vue 在服务器端直接修改请求的接口地址
2020/12/19 Vue.js
python冒泡排序算法的实现代码
2013/11/21 Python
linux下python抓屏实现方法
2015/05/22 Python
12步教你理解Python装饰器
2016/02/25 Python
python 实现上传图片并预览的3种方法(推荐)
2017/07/14 Python
python实现最大子序和(分治+动态规划)
2019/07/05 Python
在Matplotlib图中插入LaTex公式实例
2020/04/17 Python
浅谈keras2 predict和fit_generator的坑
2020/06/17 Python
python switch 实现多分支选择功能
2020/12/21 Python
英国知名奢侈品包包品牌:Milli Millu
2016/12/22 全球购物
JD Sports芬兰:英国领先的运动鞋和运动服饰零售商
2018/11/16 全球购物
软件测试工程师笔试题带答案
2015/03/27 面试题
vue实现倒计时功能
2021/03/24 Vue.js
大学本科生的个人自我评价
2013/12/09 职场文书
服务型党组织建设典型材料
2014/05/07 职场文书
毕业生党员个人总结
2015/02/14 职场文书
小学教育见习总结
2015/06/23 职场文书
物资采购管理制度
2015/08/06 职场文书
2016年大学生社区服务活动总结
2016/04/06 职场文书
团组织关系介绍信
2019/06/24 职场文书