现在的项目,无论代销,几乎不会缺省的一个功能就是上传下载功能,今天谈一谈使用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功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]