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实现的鼠标链接提示效果生成器代码
Jun 28 Javascript
用js做一个小游戏平台 (一)
Dec 29 Javascript
解决JQeury显示内容没有边距内容紧挨着浏览器边线
Dec 20 Javascript
从QQ网站中提取的纯JS省市区三级联动菜单
Dec 25 Javascript
jquery常用特效方法使用示例
Apr 25 Javascript
Node.js中安全调用系统命令的方法(避免注入安全漏洞)
Dec 05 Javascript
html、css和jquery相结合实现简单的进度条效果实例代码
Oct 24 Javascript
Bootstrap导航菜单点击后无法自动添加active的处理方法
Aug 10 Javascript
JS实现点击按钮随机生成可拖动的不同颜色块示例
Jan 30 Javascript
vue keep-alive 动态删除组件缓存的例子
Nov 04 Javascript
vue实现数字动态翻牌的效果(开箱即用)
Dec 08 Javascript
vue addRoutes路由动态加载操作
Aug 04 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
经典的PHPer为什么被认为是草根?
2007/04/02 PHP
使用php判断服务器是否支持Gzip压缩功能
2013/09/24 PHP
php中数字、字符与对象判断函数用法实例
2014/11/26 PHP
php执行多个存储过程的方法【基于thinkPHP】
2016/11/08 PHP
Laravel向公共模板赋值方法总结
2019/06/25 PHP
Javascript里使用Dom操作Xml
2006/09/20 Javascript
可以显示单图片,多图片ajax请求的ThickBox3.1类下载
2007/12/23 Javascript
关于jquery append() html时的小问题的解决方法
2010/12/16 Javascript
JavaScript获取客户端计算机硬件及系统等信息的方法
2014/01/02 Javascript
angularjs指令中的compile与link函数详解
2014/12/06 Javascript
windows8.1+iis8.5下安装node.js开发环境
2014/12/12 Javascript
js实现图片漂浮效果的方法
2015/03/02 Javascript
JS和css实现检测移动设备方向的变化并判断横竖屏幕
2015/05/25 Javascript
ECMAScript6中Map/WeakMap详解
2015/06/12 Javascript
JavaScript程序中实现继承特性的方式总结
2016/06/24 Javascript
JavaScript实现的CRC32函数示例
2016/11/23 Javascript
微信小程序 地图map详解及简单实例
2017/01/10 Javascript
webpack教程之webpack.config.js配置文件
2017/07/05 Javascript
Web技术实现移动监测的介绍
2017/09/18 Javascript
解决Vue编译时写在style中的路径问题
2017/09/21 Javascript
AngularJS实现动态切换样式的方法分析
2018/06/26 Javascript
JavaScript设计模式之构造器模式(生成器模式)定义与用法实例分析
2018/07/26 Javascript
[55:56]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
Python读写配置文件的方法
2015/06/03 Python
python重试装饰器的简单实现方法
2019/01/31 Python
Python获取网段内ping通IP的方法
2019/01/31 Python
python多进程 主进程和子进程间共享和不共享全局变量实例
2020/04/25 Python
HTML5超文本标记语言的实现方法
2020/09/24 HTML / CSS
Intersport西班牙:在线体育商店
2019/11/06 全球购物
应届毕业生求职信范例分享
2013/12/17 职场文书
幼儿教师寄语集锦
2014/04/03 职场文书
经典团队口号
2014/06/06 职场文书
公司离职证明范本(汇总)
2014/09/10 职场文书
浅谈spring boot使用thymeleaf版本的问题
2021/08/04 Java/Android
flex弹性布局详解
2022/03/20 HTML / CSS
mysql 索引的数据结构为什么要采用B+树
2022/04/26 MySQL