Spring Boot+AngularJS+BootStrap实现进度条示例代码

发布时间 - 2026-01-10 23:23:33    点击率:

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");
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# bootstrap实现进度条  # angularjs  # 进度条  # springboot  # bootstrap  # springboot带有进度条的上传功能完整实例  # spring MVC + bootstrap实现文件上传示例(带进度条)  # SpringBoot如何实现一个实时更新的进度条的示例代码  # 设置为  # 我将  # 上传  # 上传文件  # 是在  # 会在  # 用了  # 要做  # 很简单  # 只需要  # 不符合  # 后将  # 每隔  # 绑定  # 大家多多  # 就是在  # uib  # gt  # show 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  jQuery validate插件功能与用法详解  Java类加载基本过程详细介绍  php 三元运算符实例详细介绍  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  WEB开发之注册页面验证码倒计时代码的实现  如何构建满足综合性能需求的优质建站方案?  C语言设计一个闪闪的圣诞树  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  如何在阿里云域名上完成建站全流程?  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  Laravel如何使用Service Container和依赖注入?(代码示例)  android nfc常用标签读取总结  Laravel如何使用模型观察者?(Observer代码示例)  北京网站制作的公司有哪些,北京白云观官方网站?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  利用vue写todolist单页应用  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  Android中AutoCompleteTextView自动提示  浅谈redis在项目中的应用  深圳网站制作平台,深圳市做网站好的公司有哪些?  Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】  Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  简单实现Android文件上传  Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】  如何彻底删除建站之星生成的Banner?  Laravel怎么判断请求类型_Laravel Request isMethod用法  实现点击下箭头变上箭头来回切换的两种方法【推荐】  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  教你用AI润色文章,让你的文字表达更专业  JavaScript如何实现路由_前端路由原理是什么  网易LOFTER官网链接 老福特网页版登录地址  网站制作软件有哪些,制图软件有哪些?  Laravel如何使用.env文件管理环境变量?(最佳实践)  详解Android图表 MPAndroidChart折线图  Windows10如何更改计算机工作组_Win10系统属性修改Workgroup  java获取注册ip实例  Laravel怎么发送邮件_Laravel Mail类SMTP配置教程  如何在IIS中新建站点并解决端口绑定冲突?  如何在 Pandas 中基于一列条件计算另一列的分组均值  如何用VPS主机快速搭建个人网站?  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  如何生成腾讯云建站专用兑换码?  如何在Windows 2008云服务器安全搭建网站?  如何在万网ECS上快速搭建专属网站?  如何快速登录WAP自助建站平台?  如何快速搭建高效简练网站?  如何快速使用云服务器搭建个人网站?