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 相关文章推荐
jquery实现可拖动DIV自定义保存到数据的实例
Nov 20 Javascript
jQuery控制的不同方向的滑动(向左、向右滑动等)
Jul 18 Javascript
javascript同步服务器时间和同步倒计时小技巧
Sep 24 Javascript
详解javascript表单的Ajax提交插件的使用
Dec 29 Javascript
vue2.0父子组件间通信的实现方法
Apr 19 Javascript
JS实现仿饿了么在浏览器标签页失去焦点时网页Title改变
Jun 01 Javascript
EL表达式截取字符串的函数说明
Sep 22 Javascript
详解react-native WebView 返回处理(非回调方法可解决)
Feb 27 Javascript
解决vue数组中对象属性变化页面不渲染问题
Aug 09 Javascript
React如何实现浏览器打印部分内容详析
May 19 Javascript
vue数据更新UI不刷新显示的解决办法
Aug 06 Javascript
vue 数据遍历筛选 过滤 排序的应用操作
Nov 17 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分页函数
2006/07/08 PHP
PHP 第二节 数据类型之数值型
2012/04/28 PHP
ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
2014/05/15 PHP
php生成随机数的三种方法
2014/09/10 PHP
[原创]CI(CodeIgniter)简单统计访问人数实现方法
2016/01/19 PHP
php实现查询功能(数据访问)
2017/05/23 PHP
详解在YII2框架中使用UEditor编辑器发布文章
2018/11/02 PHP
解读IE和firefox下JScript和HREF的执行顺序
2008/01/12 Javascript
JavaScript 高级语法介绍
2009/06/15 Javascript
JQuery实现可直接编辑的表格
2015/04/16 Javascript
AngularJS初始化静态模板详解
2016/01/14 Javascript
sortable+element 实现表格行拖拽的方法示例
2019/06/07 Javascript
element的el-table中记录滚动条位置的示例代码
2019/11/06 Javascript
[45:46]2014 DOTA2国际邀请赛中国区预选赛5.21 HGT VS DT
2014/05/23 DOTA
[02:36]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma 选手采访
2021/03/11 DOTA
浅谈Python中的zip()与*zip()函数详解
2018/02/24 Python
Win10下python 2.7.13 安装配置方法图文教程
2018/09/18 Python
解决Django加载静态资源失败的问题
2019/07/28 Python
Python使用Pandas库常见操作详解
2020/01/16 Python
python 解决tqdm模块不能单行显示的问题
2020/02/19 Python
python3中TQDM库安装及使用详解
2020/11/18 Python
Ryderwear澳洲官网:澳大利亚高端健身训练装备品牌
2018/09/18 全球购物
优秀的教师个人的中文求职信
2013/09/21 职场文书
初中生期末考试的自我评价
2013/12/17 职场文书
电台实习生求职信
2014/02/25 职场文书
投标承诺书范本
2014/03/27 职场文书
2014年“四风”问题个人整改措施
2014/09/17 职场文书
幼儿园见习报告范文
2014/10/30 职场文书
2014年维修工作总结
2014/11/22 职场文书
优秀教师单行材料
2014/12/16 职场文书
高中生毕业评语
2014/12/30 职场文书
小鞋子观后感
2015/06/05 职场文书
联村联户简报
2015/07/21 职场文书
聘任协议书(挂靠)
2015/09/21 职场文书
5道关于python基础 while循环练习题
2021/11/27 Python
深入理解MySQL中MVCC与BufferPool缓存机制
2022/05/25 MySQL