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判断文件是否存在
Dec 31 Javascript
JQuery仿小米手机抢购页面倒计时效果
Dec 16 Javascript
JavaScript显示当前文档最后修改日期的方法
Mar 19 Javascript
js自定义回调函数
Dec 13 Javascript
解决jquery无法找到其他父级子集问题的方法
May 10 Javascript
js和jq使用submit方法无法提交表单的快速解决方法
May 17 Javascript
实现隔行换色效果的两种方式【实用】
Nov 27 Javascript
jQuery得到多个值只能用取Class ,不能用取ID的方法
Dec 04 Javascript
React-Native做一个文本输入框组件的实现代码
Aug 10 Javascript
JavaScript封装的常用工具类库bee.js用法详解【经典类库】
Sep 03 Javascript
js使用cookie实现记住用户名功能示例
Jun 13 Javascript
微信小程序停止其他视频播放当前视频的实例代码
Dec 25 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/12/30 PHP
深入理解PHP的远程多会话调试
2017/09/21 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
类似框架的js代码
2006/11/09 Javascript
JavaScript Accessor实现说明
2010/12/06 Javascript
javascript实现存储hmtl字符串示例
2014/04/25 Javascript
被遗忘的javascript的slice() 方法
2015/04/20 Javascript
js倒计时简单实现方法
2015/12/17 Javascript
原生js实现下拉框功能(支持键盘事件)
2017/01/13 Javascript
jQuery.cookie.js使用方法及相关参数解释
2017/03/06 Javascript
JS实现移动端实时监听输入框变化的实例代码
2017/04/12 Javascript
vue loadmore 组件滑动加载更多源码解析
2017/07/19 Javascript
Javascript中toFixed计算错误(依赖银行家舍入法的缺陷)解决方法
2017/08/22 Javascript
第一个Vue插件从封装到发布
2017/11/22 Javascript
React为 Vue 引入容器组件和展示组件的教程详解
2018/05/03 Javascript
vue中子组件的methods中获取到props中的值方法
2018/08/27 Javascript
重学JS之显示强制类型转换详解
2019/06/30 Javascript
vue iview的菜单组件Mune 点击不高亮的解决方案
2019/11/01 Javascript
[52:57]2014 DOTA2国际邀请赛中国区预选赛 LGD-CDEC VS HGT
2014/05/21 DOTA
[05:31]干嘛呢兄弟!DOTA2 TI9语音轮盘部分出处
2019/05/14 DOTA
python元组操作实例解析
2014/09/23 Python
python 实现网上商城,转账,存取款等功能的信用卡系统
2016/07/15 Python
python中import reload __import__的区别详解
2017/10/16 Python
Python Web框架之Django框架cookie和session用法分析
2019/08/16 Python
django自带serializers序列化返回指定字段的方法
2019/08/21 Python
python实现统计代码行数的小工具
2019/09/19 Python
python使用 cx_Oracle 模块进行查询操作示例
2019/11/28 Python
python datetime时间格式的相互转换问题
2020/06/11 Python
Python如何实现感知器的逻辑电路
2020/12/25 Python
德国亚洲食品网上商店:asiafoodland.de
2019/12/28 全球购物
M.M.LaFleur官网:美国职业女装品牌
2020/10/27 全球购物
加拿大品牌鞋包连锁店:Little Burgundy
2021/02/28 全球购物
Oasis服装官网:时尚女装在线
2020/07/09 全球购物
自荐信的禁忌和要点
2013/10/15 职场文书
办公室岗位职责
2014/02/12 职场文书
PyTorch中的torch.cat简单介绍
2022/03/17 Python