Angularjs上传文件组件flowjs功能

 更新时间:2017年08月07日 17:27:16   作者:chenqk_123  
现在的项目,无论代销,几乎不会缺省的一个功能就是上传下载功能,今天谈一谈使用AngularJS+bootsrtap下的上传下载功能,需要的朋友参考下吧

现在的项目,无论代销,几乎不会缺省的一个功能就是上传下载功能,今天谈一谈使用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功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • AngularJS指令用法详解

    AngularJS指令用法详解

    这篇文章主要介绍了AngularJS指令用法,较为详细的分析了AngularJS指令的功能、用法及自定义指令的相关实现技巧,需要的朋友可以参考下
    2016-11-11
  • AngularJs expression详解及简单示例

    AngularJs expression详解及简单示例

    本文主要介绍AngularJs expression,这里整理了详细的资料,并附示例代码,有兴趣的小伙伴可以参考下
    2016-09-09
  • AngularJS与后端php的数据交互方法

    AngularJS与后端php的数据交互方法

    今天小编就为大家分享一篇AngularJS与后端php的数据交互方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • Angularjs cookie 操作实例详解

    Angularjs cookie 操作实例详解

    本文给大家分享Angularjs cookie 操作实例详解,demo案例分析,感兴趣的朋友参考下吧
    2017-09-09
  • 详解AngularJS中的表单验证(推荐)

    详解AngularJS中的表单验证(推荐)

    AngularJS自带了很多验证,什么必填,最大长度,最小长度...,这里记录几个有用的正则式验证。本文给大家介绍的非常详细,对angularjs中表单验证知识感兴趣的朋友一起学习吧
    2016-11-11
  • 浅谈angular2 组件的生命周期钩子

    浅谈angular2 组件的生命周期钩子

    本篇文章主要介绍了浅谈angular2 组件的生命周期钩子,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • AngularJS路由Ui-router模块用法示例

    AngularJS路由Ui-router模块用法示例

    这篇文章主要介绍了AngularJS路由Ui-router模块用法,结合实例形式分析了Ui-router模块的功能、使用方法及相关注意事项,需要的朋友可以参考下
    2017-05-05
  • AngularJS中的路由使用及实现代码

    AngularJS中的路由使用及实现代码

    本篇文章主要介绍了AngularJS中的路由使用及实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • 在AngularJS应用中实现一些动画效果的代码

    在AngularJS应用中实现一些动画效果的代码

    这篇文章主要介绍了在AngularJS应用中实现一些动画效果的代码,AngularJS是一款热门的JavaScript库,需要的朋友可以参考下
    2015-06-06
  • AngularJS ng-controller 指令简单实例

    AngularJS ng-controller 指令简单实例

    本文主要介绍AngularJS ng-controller 指令,这里对ng-controller指令资料的整理,并附代码示例和效果图,有需要的朋友看下
    2016-08-08

最新评论