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中dialog属性小记
Sep 03 Javascript
不用锚点也可以平滑滚动到页面的指定位置实现代码
May 08 Javascript
jquery模拟SELECT下拉框取值效果
Oct 23 Javascript
AngularJS学习笔记之TodoMVC的分析
Feb 22 Javascript
javascript实时显示北京时间的方法
Mar 12 Javascript
使用AngularJS处理单选框和复选框的简单方法
Jun 19 Javascript
jquery控制显示服务器生成的图片流
Aug 04 Javascript
JS实现websocket长轮询实时消息提示的效果
Oct 10 Javascript
vue组件父子间通信之综合练习(聊天室)
Nov 07 Javascript
element-ui多文件上传的实现示例
Apr 10 Javascript
vue监听用户输入和点击功能
Sep 27 Javascript
sharp.js安装过程中遇到的问题总结
Apr 02 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中截取中文字符串的代码小结
2011/07/17 PHP
php中将图片gif,jpg或mysql longblob或blob字段值转换成16进制字符串
2011/08/23 PHP
PHP统计目录中文件以及目录中目录大小的方法
2016/01/09 PHP
CI框架常用经典操作类总结(路由,伪静态,分页,session,验证码等)
2016/11/21 PHP
Javascript 判断函数类型完美解决方案
2009/09/02 Javascript
js实现的切换面板实例代码
2013/06/17 Javascript
js取值中form.all和不加all的区别介绍
2014/01/20 Javascript
jquery通过load获取文件的内容并跳到锚点的方法
2015/01/29 Javascript
jQuery入门基础知识学习指南
2015/08/14 Javascript
JS实现兼容性好,带缓冲的动感网页右键菜单效果
2015/09/18 Javascript
Jquery1.9.1源码分析系列(六)延时对象应用之jQuery.ready
2015/11/24 Javascript
jQuery Validate插件实现表单强大的验证功能
2015/12/18 Javascript
angularjs实现下拉列表的选中事件示例
2017/03/03 Javascript
webpack教程之webpack.config.js配置文件
2017/07/05 Javascript
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
2017/07/09 Javascript
微信小程序对接七牛云存储的方法
2017/07/30 Javascript
js获取文件里面的所有文件名(实例)
2017/10/17 Javascript
JavaScript面向对象继承原理与实现方法分析
2018/08/09 Javascript
微信小程序进入广告实现代码实例
2019/09/19 Javascript
JavaScript 如何计算文本的行数的实现
2020/09/14 Javascript
用PyQt进行Python图形界面的程序的开发的入门指引
2015/04/14 Python
Python 实现 贪吃蛇大作战 代码分享
2016/09/07 Python
Python实现求两个csv文件交集的方法
2017/09/06 Python
python设置值及NaN值处理方法
2018/07/03 Python
Python实现的读取/更改/写入xml文件操作示例
2018/08/30 Python
Python实现九宫格式的朋友圈功能内附“马云”朋友圈
2019/05/07 Python
Python使用统计函数绘制简单图形实例代码
2019/05/15 Python
Django bulk_create()、update()与数据库事务的效率对比分析
2020/05/15 Python
英国最大的百货公司:Harrods
2016/08/18 全球购物
PAUL HEWITT手表美国站:德国北部时尚生活配饰品牌,船锚元素
2017/11/18 全球购物
英国最受欢迎的价格比较网站之一:MoneySuperMarket
2018/12/19 全球购物
匡威德国官网:Converse德国
2019/01/26 全球购物
民主生活会对照检查材料(统计局)
2014/09/21 职场文书
心术观后感
2015/06/11 职场文书
《弟子规》读后感:知廉耻、明是非、懂荣辱、辨善恶
2019/12/03 职场文书
python Tkinter的简单入门教程
2021/04/11 Python