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 获取用户客户端操作系统版本
Aug 25 Javascript
innerHTML,outerHTML,innerText,outerText的用法及区别解析
Dec 16 Javascript
基于canvas实现的钟摆效果完整实例
Jan 26 Javascript
AngularJS在IE下取数据总是缓存问题的解决方法
Aug 05 Javascript
jQuery 判断元素整理汇总
Feb 28 Javascript
jquery 获取索引值在一定范围的列表方法
Jan 25 jQuery
详解vue移动端日期选择组件
Feb 22 Javascript
vue脚手架搭建过程图解
Jun 06 Javascript
axios对请求各种异常情况处理的封装方法
Sep 25 Javascript
详解小程序input框失焦事件在提交事件前的处理
May 05 Javascript
JavaScript 反射和属性赋值实例解析
Oct 28 Javascript
微信小程序用户登录和登录态维护的实现
Dec 10 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
2020年4月新番动漫目录 官方宣布4月播出的作品一览
2020/03/08 日漫
PHP新手上路(四)
2006/10/09 PHP
PHP 写文本日志实现代码
2010/05/18 PHP
ThinkPHP上使用多说评论插件的方法
2014/10/31 PHP
php 利用socket发送HTTP请求(GET,POST)
2015/08/24 PHP
Yii2实现中国省市区三级联动实例
2017/02/08 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
javascript instanceof,typeof的区别
2010/03/24 Javascript
Js从头学起(基本数据类型和引用类型的参数传递详细分析)
2012/02/16 Javascript
jQuery UI Autocomplete 1.8.16 中文输入修正代码
2012/04/16 Javascript
JS中setTimeout()的用法详解
2013/04/14 Javascript
js中函数声明与函数表达式
2015/06/03 Javascript
Bootstrap CSS布局之表单
2016/12/17 Javascript
JavaScript 总结几个提高性能知识点(推荐)
2017/02/20 Javascript
jQuery基于闭包实现的显示与隐藏div功能示例
2018/06/09 jQuery
详解jQuery设置内容和属性
2019/04/11 jQuery
tweenjs缓动算法的使用实例分析
2019/08/26 Javascript
在Python中的Django框架中进行字符串翻译
2015/07/27 Python
Python爬虫之网页图片抓取的方法
2018/07/16 Python
pygame游戏之旅 按钮上添加文字的方法
2018/11/21 Python
Pytorch之finetune使用详解
2020/01/18 Python
使用 Python 读取电子表格中的数据实例详解
2020/04/17 Python
python适合做数据挖掘吗
2020/06/16 Python
使用Python操作MySQL的小技巧
2020/09/10 Python
使用css3制作动感导航条示例
2014/01/26 HTML / CSS
在线购买廉价折扣书籍和小说:BookOutlet.com
2018/02/19 全球购物
自考自我鉴定范文
2013/10/30 职场文书
应届毕业生个人自荐信范文
2013/11/30 职场文书
个人思想理论学习的自我鉴定
2013/11/30 职场文书
写演讲稿要注意的六件事
2014/01/14 职场文书
小学评语大全
2014/04/22 职场文书
旷课检讨书范文
2015/01/27 职场文书
寻衅滋事罪辩护词
2015/05/21 职场文书
迎新生欢迎词2015
2015/07/16 职场文书
使用Ajax实现进度条的绘制
2022/04/07 Javascript
MySQL的表级锁,行级锁,排它锁和共享锁
2022/07/15 MySQL