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 textContent与innerText的异同分析
Oct 22 Javascript
写出高效jquery代码的19条指南
Mar 19 Javascript
动态创建script在IE中缓存js文件时导致编码的解决方法
May 04 Javascript
JavaScript中使用数组方法汇总
Feb 16 Javascript
JS中正则表达式全局匹配模式 /g用法详解
Apr 01 Javascript
Less 安装及基本用法
May 05 Javascript
vue操作动画的记录animate.css实例代码
Apr 26 Javascript
Vue.js路由实现选项卡简单实例
Jul 24 Javascript
mpvue微信小程序的接口请求fly全局拦截代码实例
Nov 13 Javascript
JavaScript实现图片合成下载的示例
Nov 19 Javascript
vuex Module将 store 分割成模块的操作
Dec 07 Vue.js
如何用Node.js编写内存效率高的应用程序
Apr 30 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
比特率,大家看看这个就不用收音机音质去比MP3音质了
2021/03/01 无线电
用PHP制作的意见反馈表源码
2007/03/11 PHP
php ftp文件上传函数(基础版)
2010/06/03 PHP
php 生成唯一id的几种解决方法
2013/03/08 PHP
PHP Warning: Module 'modulename' already loaded in问题解决办法
2015/03/16 PHP
又拍云异步上传实例教程详解
2016/04/19 PHP
比Jquery的document.ready更快的方法
2010/04/28 Javascript
使用jQuery内容过滤选择器选择元素实例讲解
2013/04/18 Javascript
js父页面与子页面不同时显示的方法
2014/10/16 Javascript
详解AngularJS中自定义指令的使用
2015/06/17 Javascript
详解JavaScript的另类写法
2016/04/11 Javascript
浅谈JavaScript中的分支结构
2016/07/01 Javascript
JavaScript实现Fly Bird小游戏
2016/12/15 Javascript
jQuery Validate让普通按钮触发表单验证的方法
2016/12/15 Javascript
详解vue-cli项目中怎么使用mock数据
2018/05/29 Javascript
JS隐藏号码中间4位代码实例
2019/04/09 Javascript
vue如何实现自定义底部菜单栏
2019/07/01 Javascript
浅谈vue限制文本框输入数字的正确姿势
2019/09/02 Javascript
iview form清除校验状态的实现
2019/09/19 Javascript
Python map和reduce函数用法示例
2015/02/26 Python
在Python中使用mongoengine操作MongoDB教程
2015/04/24 Python
Python RuntimeError: thread.__init__() not called解决方法
2015/04/28 Python
详解在Python的Django框架中创建模板库的方法
2015/07/20 Python
Python实现屏幕截图的代码及函数详解
2016/10/01 Python
详解常用查找数据结构及算法(Python实现)
2016/12/09 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
2018/05/09 Python
Python实现通过继承覆盖方法示例
2018/07/02 Python
python 用opencv调用训练好的模型进行识别的方法
2018/12/07 Python
numpy库与pandas库axis=0,axis= 1轴的用法详解
2019/05/27 Python
Django框架模型简单介绍与使用分析
2019/07/18 Python
Python爬虫分析微博热搜关键词的实现代码
2021/02/22 Python
求职信怎么写范文
2014/05/26 职场文书
财务管理专业自荐书
2014/09/02 职场文书
政风行风整改方案
2014/10/25 职场文书
表扬稿范文
2015/01/17 职场文书
英文感谢信格式
2015/01/21 职场文书