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 相关文章推荐
该如何加载google-analytics(或其他第三方)的JS
May 13 Javascript
使用jQuery操作Cookies的实现代码
Oct 09 Javascript
动态的改变IFrame的高度实现IFrame自动伸展适应高度
Dec 28 Javascript
jQuery提交多个表单的小例子
Jun 30 Javascript
jQuery实现的placeholder效果完整实例
Aug 02 Javascript
jQuery EasyUI 页面加载等待及页面等待层
Feb 06 Javascript
vue时间格式化实例代码
Jun 13 Javascript
Vue实现底部侧边工具栏的实例代码
Sep 03 Javascript
vue生成文件本地打开查看效果的实例
Sep 06 Javascript
浅析JavaScript 函数防抖和节流
Jul 13 Javascript
javaScript实现一个队列的方法
Jul 14 Javascript
Vue 实现创建全局组件,并且使用Vue.use() 载入方式
Aug 11 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
php小偷相关截取函数备忘
2010/11/28 PHP
功能强大的PHP发邮件类
2016/08/29 PHP
浅谈php中fopen不能创建中文文件名文件的问题
2017/02/06 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
php中yii框架实例用法
2020/12/22 PHP
javascript showModalDialog,open取得父窗口的方法
2010/03/10 Javascript
SlideView 图片滑动(扩展/收缩)展示效果
2010/08/01 Javascript
js调用activeX获取u盘序列号的代码
2011/11/21 Javascript
node.js中的fs.writeFileSync方法使用说明
2014/12/14 Javascript
js操作cookie保存浏览记录的方法
2015/12/25 Javascript
如何使用AngularJs打造权限管理系统【简易型】
2016/05/09 Javascript
jquery 将当前时间转换成yyyymmdd格式的实现方法
2016/06/01 Javascript
Bootstrap源码学习笔记之bootstrap进度条
2016/12/24 Javascript
javascript深拷贝的原理与实现方法分析
2017/04/10 Javascript
使用vue打包时vendor文件过大或者是app.js文件很大的问题
2018/06/29 Javascript
vue interceptor 使用教程实例详解
2018/09/13 Javascript
vue keep-alive列表页缓存 详情页返回上一页不刷新,定位到之前位置
2019/11/26 Javascript
解决antd的Form组件setFieldsValue的警告问题
2020/10/29 Javascript
python一键去抖音视频水印工具
2018/09/14 Python
对pandas写入读取h5文件的方法详解
2018/12/28 Python
修改 CentOS 6.x 上默认Python的方法
2019/09/06 Python
绝对令人的惊叹的CSS3折叠效果(3D效果)整理
2012/12/30 HTML / CSS
奥地利购买珠宝和手表网站:ELLA JUWELEN
2019/09/03 全球购物
欧姆龙医疗保健与医疗产品:Omron Healthcare
2020/02/10 全球购物
面向对象设计的原则是什么
2013/02/13 面试题
EJB与JAVA BEAN的区别
2016/08/29 面试题
学徒工职责
2014/03/06 职场文书
贷款委托书怎么写
2014/08/02 职场文书
党的群众路线教育实践活动个人对照检查剖析材料
2014/09/23 职场文书
机关副主任个人四风问题整改措施
2014/09/26 职场文书
2015元旦家电促销活动策划方案
2014/12/09 职场文书
死亡赔偿协议书
2015/01/28 职场文书
张丽莉事迹观后感
2015/06/16 职场文书
诚实守信主题班会
2015/08/13 职场文书
使用ORM新增数据在Mysql中的操作步骤
2021/07/26 MySQL
前端JS获取URL参数的4种方法总结
2022/04/05 Javascript