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 相关文章推荐
js 字符串操作函数
Jul 25 Javascript
JS简单实现登陆验证附效果图
Nov 19 Javascript
js动态删除div元素基本思路及实现代码
May 08 Javascript
AngularJS HTML编译器介绍
Dec 06 Javascript
JQuery中基础过滤选择器用法实例分析
May 18 Javascript
jquery插件uploadify实现带进度条的文件批量上传
Dec 13 Javascript
使用jQuery制作浮动工具栏的实例分享
May 13 Javascript
jquery自定义表单验证插件
Oct 12 Javascript
angular实现form验证实例代码
Jan 17 Javascript
详解React 16 中的异常处理
Jul 28 Javascript
css和js实现弹出登录居中界面完整代码
Nov 26 Javascript
Element InfiniteScroll无限滚动的具体使用方法
Jul 27 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执行zip与rar解压缩方法实现代码
2010/12/05 PHP
php微信公众开发之获取周边酒店信息的方法
2014/12/22 PHP
php编写简单的文章发布程序
2015/06/18 PHP
Yii2中使用asset压缩js,css文件的方法
2016/11/24 PHP
小程序微信退款功能实现方法详解【基于thinkPHP】
2019/05/05 PHP
js 方法实现返回多个数据的代码
2009/04/30 Javascript
JavaScript设计模式之代理模式介绍
2014/12/28 Javascript
jQuery中triggerHandler()方法用法实例
2015/01/19 Javascript
jQuery+html5实现div弹出层并遮罩背景
2015/04/15 Javascript
Jquery注册事件实现方法
2015/05/18 Javascript
理解AngularJs篇:30分钟快速掌握AngularJs
2016/12/23 Javascript
最常见和最有用的字符串相关的方法详解
2017/02/06 Javascript
JS一个简单的注册页面实例
2017/09/05 Javascript
JavaScript设计模式之工厂模式简单实例教程
2018/07/03 Javascript
跨域解决之JSONP和CORS的详细介绍
2018/11/21 Javascript
javascript对HTML字符转义与反转义
2018/12/13 Javascript
vue elementUI 表单校验功能之数组多层嵌套
2019/06/04 Javascript
使用preload预加载页面资源时注意事项
2020/02/03 Javascript
微信小程序实现通讯录列表展开收起
2020/11/18 Javascript
python使用正则表达式提取网页URL的方法
2015/05/26 Python
浅谈Python处理PDF的方法
2017/11/10 Python
python使用opencv实现马赛克效果示例
2019/09/28 Python
python multiprocessing多进程变量共享与加锁的实现
2019/10/02 Python
Django框架模板用法入门教程
2019/11/04 Python
Python可变参数会自动填充前面的默认同名参数实例
2019/11/18 Python
如何配置关联Python 解释器 Anaconda的教程(图解)
2020/04/30 Python
AE美国鹰美国官方网站:American Eagle Outfitters
2016/08/22 全球购物
Booking.com美国:全球酒店预订网站
2017/04/18 全球购物
华为消费者德国官方网站:HUAWEI德国
2020/11/03 全球购物
Happy Plugs官网:瑞典无线耳机品牌
2020/07/16 全球购物
学生就业推荐信
2013/11/13 职场文书
《会走路的树》教后反思
2014/04/19 职场文书
党员作风建设整改方案
2014/10/27 职场文书
先进工作者推荐材料
2014/12/23 职场文书
2019年工作总结范文
2019/05/21 职场文书
浅谈Mysql多表连接查询的执行细节
2021/04/24 MySQL