AngularJS 文件上传控件 ng-file-upload详解


Posted in Javascript onJanuary 13, 2017

网上可以找到的 AngularJS 的文件上传控件有两个:

angular-file-upload:https://github.com/nervgh/angular-file-upload

ng-file-upload:https://github.com/danialfarid/ng-file-upload

这两个非常类似,连js文件的结构都是一样的。核心的js是.min.js,还都有一个-shim.min.js,用来支持上传进度条和上传暂停等高级功能。

按道理讲shim.js应该是可加可不加,但实测-shim.min.js必须包含,否则有js文件加载问题。但是angular-file-upload-shim.min.js这个文件在github上不存在!!!

所以用ng-file-upload!用ng-file-upload!用ng-file-upload!

angular-file-upload 是一款轻量级的 AngularJS 文件上传工具,为不支持浏览器的 FileAPI polyfill 设计,使用 HTML5 直接进行文件上传。

 特性

支持上传进度,在上传的时候,可以取消或者中止,支持文件拖拽(HTML5),目录拖拽(weikit),CORS, PUT(html5)/POST 方法

支持使用 Flash polyfill FileAPI  跨浏览器上传 (HTML5 和 non-HTML5) 。允许客户端在上传之前验证或者修改文件。

当文件的内容类型使用 $upload.http()时,支持直接上传到 CouchDB,imgur 等等。支持 Angular http POST/PUT 请求的进度事件

轻量级,使用常规的 $http 来上传(支持非 HTML5 浏览器),所以提供所有 Angular $http 功能

例子

<!DOCTYPE html>
<html ng-app="app">

<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 <title>文件上传</title>
 <meta charset="utf-8"/>
 <script src="JS/angular.min.js"></script>
 <script src="JS/ng-file-upload.min.js"></script>
 <script src="JS/ng-file-upload-shim.min.js"></script>
 <script>
  var app = angular.module('app', ['ngFileUpload']);
  app.controller('FileController', function ($scope, Upload) {
   $scope.uploadImg = '';
   //提交
   $scope.submit = function () {
    $scope.upload($scope.file);
   };
   $scope.upload = function (file) {
    $scope.fileInfo = file;
    Upload.upload({
     //服务端接收
     url: 'Ashx/UploadFile.ashx',
     //上传的同时带的参数
     data: {'username': $scope.username},
     //上传的文件
     file: file
    }).progress(function (evt) {
     //进度条
     var progressPercentage = parseInt(100.0 * evt.loaded / evt.total);
     console.log('progess:' + progressPercentage + '%' + evt.config.file.name);
    }).success(function (data, status, headers, config) {
     //上传成功
     console.log('file ' + config.file.name + 'uploaded. Response: ' + data);
     $scope.uploadImg = data;
    }).error(function (data, status, headers, config) {
     //上传失败
     console.log('error status: ' + status);
    });
   };
  });
 </script>
</head>

<body>
 <form ng-controller="FileController">
  <img src="{{uploadImg}}"/>
  当前上传用户:<input type="text" placeholder="请输入您的名称" name="name" ng-model="username"/>
  <div class="button" ngf-select ng-model="file" name="file" ngf-pattern="'image/*" accept="image/*" ngf-max-size="20MB" ngf-min-height="100">Select</div>
  <button type="submit" ng-click="submit()">submit</button>
  {{fileInfo.name}}<br/>
  {{fileInfo.size}}
 </form>
</body>

</html>

这是前端页面,后端如果用Java的话可以用commons-fileupload等文件上传类库。

注意

如果后端使用了Struts等框架,框架的过滤器会自动处理http请求中的上传的文件部分,造成在Servlet中获取不到请求的文件数据。

解决方法一是更改Struts配置文件,将文件上传的过滤器改为我们自己编写的空白过滤器

解决方法二是像submit一个带有<input type="file">的form表单一样,让Struts自动获取到上传的文件。只需要在Servlet中添加一个File类型的属性,并加入get/set方法。属性的名字一定要是file!!!

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

Javascript 相关文章推荐
JavaScript 函数式编程的原理
Oct 16 Javascript
js 动态选中下拉框
Nov 26 Javascript
JavaScript中两种链式调用实现代码
Jan 12 Javascript
JavaScript动态加载样式表的方法
Mar 21 Javascript
javascript弹性运动效果简单实现方法
Jan 08 Javascript
基于jQuery实现二级下拉菜单效果
Feb 01 Javascript
基于javascript制作微信聊天面板
Aug 09 Javascript
使用jQuery ajaxupload插件实现无刷新上传文件
Apr 23 jQuery
表格展示利器 Bootstrap Table实例代码
Sep 06 Javascript
vue2.0实现前端星星评分功能组件实例代码
Feb 12 Javascript
javascript实现商品图片放大镜
Nov 28 Javascript
Vue列表如何实现滚动到指定位置样式改变效果
May 09 Javascript
BootStrap表单验证实例代码
Jan 13 #Javascript
js实现随机抽选效果、随机抽选红色球效果
Jan 13 #Javascript
bootstrap滚动监控器使用方法解析
Jan 13 #Javascript
微信小程序 页面之间传参实例详解
Jan 13 #Javascript
bootstrap下拉菜单使用方法解析
Jan 13 #Javascript
js数组与字符串常用方法总结
Jan 13 #Javascript
使用微信内嵌H5网页解决JS倒计时失效问题
Jan 13 #Javascript
You might like
从C/C++迁移到PHP——判断字符类型的函数
2006/10/09 PHP
PHP编码规范之注释和文件结构说明
2010/07/09 PHP
浅谈PHP与C#的值类型指向区别的详解
2013/05/21 PHP
php同时使用session和cookie来保存用户登录信息的实现代码
2016/05/13 PHP
PHP生成随机密码4种方法及性能对比
2020/12/11 PHP
从jQuery.camelCase()学习string.replace() 函数学习
2011/09/13 Javascript
js导出txt示例代码
2014/01/14 Javascript
jQuery实现的一个自定义Placeholder属性插件
2014/08/11 Javascript
关于编写性能高效的javascript事件的技术
2014/11/28 Javascript
JavaScript从数组中删除指定值元素的方法
2015/03/18 Javascript
input点击后placeholder中的提示消息消失
2016/01/15 Javascript
svg动画之动态描边效果
2017/02/22 Javascript
vue-resourse将json数据输出实例
2017/03/08 Javascript
详解vuex的简单使用
2018/03/12 Javascript
基于webpack4搭建的react项目框架的方法
2018/06/30 Javascript
vue 实现 rem 布局或vw 布局的方法
2019/11/13 Javascript
[05:29]2014DOTA2国际邀请赛 赛后专访:LGDNewbee顺利过关
2014/07/13 DOTA
Python中不同进制互相转换(二进制、八进制、十进制和十六进制)
2015/04/05 Python
python实现单线程多任务非阻塞TCP服务端
2017/06/13 Python
Python lxml解析HTML并用xpath获取元素的方法
2019/01/02 Python
PyQt5的安装配置过程,将ui文件转为py文件后显示窗口的实例
2019/06/19 Python
Pycharm使用之设置代码字体大小和颜色主题的教程
2019/07/12 Python
Python爬虫抓取指定网页图片代码实例
2020/07/24 Python
python能做哪些生活有趣的事情
2020/09/09 Python
Python 实现微信自动回复的方法
2020/09/11 Python
PyQt5通过信号实现MVC的示例
2021/02/06 Python
医药代表个人求职信范本
2013/12/19 职场文书
违反工作纪律检讨书
2014/02/15 职场文书
2014年“向国旗敬礼”网上签名寄语活动方案
2014/09/27 职场文书
有限公司股东合作协议书
2014/10/29 职场文书
医务人员医德考评自我评价
2015/03/03 职场文书
青涩记忆观后感
2015/06/18 职场文书
2016机关干部作风建设心得体会
2016/01/21 职场文书
Python破解极验滑动验证码详细步骤
2021/05/21 Python
SQL Server代理:理解SQL代理错误日志处理方法
2021/06/30 SQL Server
JavaScript中document.activeELement焦点元素介绍
2021/11/27 Javascript