Angularjs上传文件组件flowjs功能


Posted in Javascript onAugust 07, 2017

现在的项目,无论代销,几乎不会缺省的一个功能就是上传下载功能,今天谈一谈使用AngularJS+bootsrtap下的上传下载功能。

1.angularjs和flowjs

angularjs我在其他的博客里面也讲到了它的其他的一些用处,只是没有做过系统的说明,在这里也不打算一一介绍。这个在一些官网上都有说明,我也会花一点时间去整理一下angularjs的知识点以及在使用到angularjs需要注意的或者我在项目中碰到的一些问题,会在其他博客中跟大家分享。这里我只简单的一笔带过,主要是flowjs这个组件的使用。顺便一提,还得夸夸angularjs的强大。

1.1 flowjs

https://github.com/flowjs/flow.js,这个网站上是我见到过对flowjs这部分描述最清楚的API了,上面列举了flowjs作为angular下的上传组件的使用以及属性的详细讲解。我主要列举flowjs常用的一些属性以及使用时需要注意的问题

1.2flowjs属性

<form class="panel panel-default" 
   flow-init="{target: 'url',singleFile:false,testChunks:false}" 
   flow-name="vm.flow" 
   flow-files-added="!!{pem:1}[$file.getExtension()]" 
   flow-file-success="vm.action.importCAData($message)"> 
</form>

这是一个最简单的实现上传功能的代码,里面包含了一些属性和方法,其他的一些参数这里暂时用不到,感兴趣的请到上面的网站去查阅。

<span style="font-size:18px;" deep="8">{ 
 "flow-init":"初始化上传的属性值", 
 "target":"请求接口路径,对应到后台server端请求", 
 "singleFile":"是否选择单文件上传,因为flowjs默认是支持多文件上传的, 
        当然也有的需求会需要单文件上传,取值为true或false." 
        "true是只支持单文件上传,false支持多文件上传,记得一定是boolean类型的." 
 "testChunks":"flowjs上传是分片的,所以他不会只往后台发送一次请求,如果文件比较大, 
        它会分多片上传,然后等所有的都上传文成," 
        "他会去合成一个整体的文件,而这个属性设置为true之后就会去检测一下该请求在后台是否开启, 
        如果开了就会在下次即使重启或者浏览器奔溃后继续上传,我的理解应该是续传吧", 
 "flow-files-added":"可以用来限制上传文件的格式,比如excel,pem,jpeg,png等格式要求!!{pem:1,png:1}", 
 "flow-file-success":"上传成功之后的回调函数,你可以在这里面处理上传之后的其他操作。比如使用这个组件的时候会和其他表单项一起提交", 
           "这时我们需要将文件的上传路径,文件名字和其他表单项一起提交到后台,而该组件不支持参数传递,也就是使用这个组件", 
           "分为两步,第一步:点击上传,先将文件上传到服务器指定路径。同时后台返回文件路径,文件大小,文件名称等与文件相关的信息", 
           "第二步:将后台返回的文件信息和其他表单项一起封装到一个对象中,发送给后台。后台接到请求,将上传信息进行入库操作" 
}</span>

1.3实例

上面已经对flowjs进行了一个说明,在这里举个例子来使用一下该组件。关于引入js,我就不详细说了。

1.3.1组件配置

html代码(里面有些我们自定义的样式我就没有删除):

<form class="panel panel-default" 
   flow-init="{target: 'api/ham/tool/certificate/importCa',singleFile:true,testChunks:false}" 
   flow-name="vm.flow" 
   flow-file-added="!!{pem:1}[$file.getExtension()]" 
   flow-file-success="vm.action.importCAData($message)"> 
   <div class="panel-heading"> 
      <h4 class="app-heading"> 
         upload file 
      </h4> 
   </div> 
   <div class="panel-body"> 
      <div class="form-horizontal"> 
         <div class="asterisk-info">{{::'button-label.asterisk' | i18next }}</div> 
         <div class="form-group"> 
            <label class="col-md-3 control-label">*{{::'am.secondaryMenu.tools.certificate.item.uploadCAFile'|i18next}}</label> 
            <div class="col-md-6 " style="background-color:#eee;"> 
               <div class="file-name-list" style="min-height: 10em;"> 
                  <p ng-repeat="file in $flow.files" style="margin:10px 0px;"> 
                     {{$index+1}}  {{file.name}} 
                  </p> 
               </div> 
            </div> 
            <span class="btn btn-primary col-md-1" style="margin-left: 20px;" flow-btn>{{::'am.secondaryMenu.tools.certificate.item.upload'|i18next}}</span> 
         </div> 
      </div> 
   </div> 
   <div class="panel-footer"> 
      <div class="text-right"> 
         <button id="sampleOne-edit" type="button" class="btn btn-primary" 
             ng-click="vm.action.commitCAFile($flow)" ng-disabled="$flow.files.length < 1" 
             title="{{::'button-label.import' | i18next}}">{{::'button-label.import' | i18next}} 
         </button> 
      </div> 
   </div> 
</form>

从这里我们可以看出,组件是基于form表单的,当然你也可以基于其他dom节点上,基于表单的好处主要是在于表单的提交即submit按钮可以直接帮到到文件上传的$flow.upload方法上,当用户选择文件后,点击上传就会执行上传方法,在整个form表单中该$flow是全局存在的,这样我们就可以根据文件的大小或者是否选择文件来确定是否允许用户上传,为了缓解服务器压力,我们一般是不会让用户提交一些误操作的。

1.3.2方法处理

上传方法:$flow.upload

上传成功的回调函数:

vm.action.importCAData = function (responseResult) { 
        console.info('importCAData'); 
        vm.action.CAName = angular.fromJson(responseResult).data; 
        //var data = responseResult.data; 
        //data.keyPasswd = vm.cache.currentItem.keyPasswd; 
        var result = angular.fromJson(responseResult).result; 
        var errorMessage = angular.fromJson(responseResult).errorMessage; 
        if(result == "success"){ 
          vm.cache.caFlag = true; 
          vm.cache.alert._success("Upload CA certificates successfully!", vm.alertConfig); 
        }else { 
          vm.caDisabled = false; 
          vm.cache.alert._error(errorMessage, vm.alertConfig); 
        } 
      }

在这里的处理是将后台返回的文件相关的属性赋值给其他变量。当我们存在其他表单项的时候,需要将该文件的一些属性和表单项封装到同一个对象中发送给后台,让后台进行一些入库操作。
表单提交操作:

//save the form  
      vm.action.createItem = function () { 
        vm.action.data.keyPasswd = vm.cache.currentItem.keyPasswd; 
        vm.action.data.CAName = vm.action.CAName; 
        var data = {}; 
        data.caFileName = vm.action.CAName; 
        data.fileName = vm.action.data.fileName; 
        data.from = vm.action.data.from; 
        data.isExpiryStatus = vm.action.data.isExpiryStatus; 
        data.name = vm.action.data.name; 
        data.to = vm.action.data.to; 
        data.type = vm.action.data.type; 
        data.keyPasswd = vm.cache.currentItem.keyPasswd; 
        data.usingStatus = vm.action.data.usingStatus; 
        data.validityStartTime = vm.action.data.validityStartTime; 
        data.validityStopTime = vm.action.data.validityStopTime; 
        amCertificateService.createItem(data).then(function success(responseResult) { 
            if (responseResult.errorCode == 0) { 
              vm.action.reset(); 
              vm.cache.alert._success('Create radius server certificate successfully ', vm.alertConfig); 
            } else { 
              vm.cache.alert._error(responseResult.translated.errorMessageTranslated, vm.alertConfig); 
            } 
            amCertificateService.getList(); 
          }) 
          .catch(function fail(e) { 
            vm.cache.alert._error(""); 
          }) 
          .finally(function () { 
            vm.action.reset(); 
          }); 
      };

1.4后台处理

后天处理我就不多说了,自从搞上了前端,后台的代码我都挺长时间没动过了,感觉挺悲哀的。但是后天使用的是springmvc,springmvc的上传类叫MultipartFile,当然你也可以使用HttpServletRequest ,这个里面也可以转为上面的那个类。这个网上一搜一大片,我就不多说了。至此,文件上传功能就这样实现了

总结

以上所述是小编给大家介绍的Angularjs上传文件组件flowjs功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
js兼容标准的表格变色效果
Jun 28 Javascript
用js实现的自定义的对话框的实现代码
Mar 21 Javascript
基于jQuery的公告无限循环滚动实现代码
May 11 Javascript
理解和运用JavaScript的闭包机制
Aug 13 Javascript
JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
Aug 05 Javascript
微信小程序 form组件详解
Oct 25 Javascript
Angular2利用组件与指令实现图片轮播组件
Mar 27 Javascript
解决Layui 表单提交数据为空的问题
Aug 15 Javascript
jQuery 同时获取多个标签的指定内容并储存为数组
Nov 20 jQuery
详解js实时获取并显示当前时间的方法
May 10 Javascript
改变layer confirm弹窗按钮的颜色方法
Sep 12 Javascript
vue.js中ref及$refs的使用方法解析
Oct 08 Javascript
详解Vue的computed(计算属性)使用实例之TodoList
Aug 07 #Javascript
详解express与koa中间件模式对比
Aug 07 #Javascript
JS实现简单短信验证码界面
Aug 07 #Javascript
ReactNative Image组件使用详解
Aug 07 #Javascript
JS实现移动端判断上拉和下滑功能
Aug 07 #Javascript
在iframe中使bootstrap的模态框在父页面弹出问题
Aug 07 #Javascript
JS判断微信扫码的方法
Aug 07 #Javascript
You might like
php unset全局变量运用问题的深入解析
2013/06/17 PHP
PHP生成图片验证码功能示例
2017/01/12 PHP
Javascript实现真实字符串剩余字数提示的实例代码
2013/10/22 Javascript
js实现鼠标点击左上角滑动菜单效果代码
2015/09/06 Javascript
JS实现title标题栏文字不间断滚动显示效果
2016/09/07 Javascript
微信小程序 Flex布局详解
2016/10/09 Javascript
vue-hook-form使用详解
2017/04/07 Javascript
AngularJS 霸道的过滤器小结
2017/04/26 Javascript
bootstrap fileinput实现文件上传功能
2017/08/23 Javascript
分享vue.js devtools遇到一系列问题
2017/10/24 Javascript
详解基于 Node.js 的轻量级云函数功能实现
2019/07/08 Javascript
jQuery实现轮播图效果
2019/11/26 jQuery
vue+element 实现商城主题开发的示例代码
2020/03/26 Javascript
JS轮播图的实现方法2
2020/08/25 Javascript
Vue项目中使用mock.js的完整步骤
2021/01/12 Vue.js
[49:20]2014 DOTA2国际邀请赛中国区预选赛5.21 CIS VS TongFu
2014/05/22 DOTA
[52:57]2014 DOTA2国际邀请赛中国区预选赛 LGD-CDEC VS HGT
2014/05/21 DOTA
Django与遗留的数据库整合的方法指南
2015/07/24 Python
Python实现的摇骰子猜大小功能小游戏示例
2017/12/18 Python
python使用time、datetime返回工作日列表实例代码
2019/05/09 Python
如何在windows下安装Pycham2020软件(方法步骤详解)
2020/05/03 Python
Django中的模型类设计及展示示例详解
2020/05/29 Python
python适合做数据挖掘吗
2020/06/16 Python
Pycharm安装第三方库失败解决方案
2020/11/17 Python
Selenium 安装和简单使用的实现
2020/12/04 Python
微信小程序canvas实现水平、垂直居中效果
2020/02/05 HTML / CSS
俄罗斯眼镜网: optikaworld
2016/07/31 全球购物
英国打印机墨盒销售网站:Ink Factory
2019/10/07 全球购物
实习生自荐信范文
2013/11/13 职场文书
图书室标语
2014/06/21 职场文书
做一个有道德的人活动方案
2014/08/25 职场文书
会员卡清退活动总结
2014/08/27 职场文书
慈善捐赠倡议书
2014/08/30 职场文书
HTML5 语义化标签(移动端必备)
2021/08/23 HTML / CSS
Python自动化实战之接口请求的实现
2022/05/30 Python
Python使用plt.boxplot()函数绘制箱图、常用方法以及含义详解
2022/08/14 Python