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的public、private和privileged模式
Dec 28 Javascript
JavaScript isArray()函数判断对象类型的种种方法
Oct 11 Javascript
基于jquery的内容循环滚动小模块(仿新浪微博未登录首页滚动微博显示)
Mar 28 Javascript
使用js实现雪花飘落效果
Aug 26 Javascript
jquery实现加载等待效果示例
Sep 25 Javascript
window.print打印指定div指定网页指定区域的方法
Aug 04 Javascript
JavaScript代码判断点击第几个按钮
Dec 13 Javascript
AngularJs表单验证实例详解
May 30 Javascript
Bootstrap3制作搜索框样式的方法
Jul 11 Javascript
浅谈angularJS的$watch失效问题的解决方案
Aug 11 Javascript
详解利用Angular实现多团队模块化SPA开发框架
Nov 27 Javascript
使用vue制作探探滑动堆叠组件的实例代码
Mar 07 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
咖啡产品发展的三大浪潮
2021/03/04 咖啡文化
laravel自定义分页的实现案例offset()和limit()
2019/10/15 PHP
js select常用操作控制代码
2010/03/16 Javascript
10个基于Jquery的幻灯片插件教程
2010/10/29 Javascript
基于Jquery制作的幻灯片图集效果打包下载
2011/02/12 Javascript
点击页面其它地方隐藏该div的两种思路
2013/11/18 Javascript
js浏览器本地存储store.js介绍及应用
2014/05/13 Javascript
分享2个jQuery插件--jquery.fileupload与artdialog
2014/12/26 Javascript
Angularjs注入拦截器实现Loading效果
2015/12/28 Javascript
javascript实现延时显示提示框特效代码
2016/04/27 Javascript
jQuery实现将div中滚动条滚动到指定位置的方法
2016/08/10 Javascript
vue params、query传参使用详解
2017/09/12 Javascript
详解react-native WebView 返回处理(非回调方法可解决)
2018/02/27 Javascript
使用angular-cli webpack创建多个包的方法
2018/10/16 Javascript
Express结合Webpack的全栈自动刷新
2019/05/23 Javascript
使用Python实现一个简单的项目监控
2015/03/31 Python
Python数据处理numpy.median的实例讲解
2018/04/02 Python
详解Python 解压缩文件
2019/04/09 Python
Django 静态文件配置过程详解
2019/07/23 Python
python处理RSTP视频流过程解析
2020/01/11 Python
PyQt5+Pycharm安装和配置图文教程详解
2020/03/24 Python
Python使用正则表达式实现爬虫数据抽取
2020/08/17 Python
HTML5新增的表单元素和属性实例解析
2014/07/07 HTML / CSS
业务主管岗位职责范本
2013/12/25 职场文书
捐献物资倡议书范文
2014/05/19 职场文书
机械操作工岗位职责
2014/08/08 职场文书
2014房屋登记授权委托书
2014/10/13 职场文书
2014年人事行政工作总结
2014/12/03 职场文书
2014司机年终工作总结
2014/12/05 职场文书
公务员政审材料
2014/12/23 职场文书
表扬通报怎么写
2015/01/16 职场文书
2015教师个人师德工作总结
2015/10/23 职场文书
《落花生》教学反思
2016/02/16 职场文书
《七月的天山》教学反思
2016/02/19 职场文书
十大经典日本动漫排行榜 海贼王第三,犬夜叉仅第八
2022/03/18 日漫
Mysql中常用的join连接方式
2022/05/11 MySQL