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 相关文章推荐
HTML页面如何象ASP一样接受参数
Feb 07 Javascript
javascript检测浏览器flash版本的实现代码
Dec 06 Javascript
js中的数组Array定义与sort方法使用示例
Aug 29 Javascript
JS保留两位小数,多位小数的示例代码
Jan 07 Javascript
使用jquery制作弹出框效果
Apr 03 Javascript
微信小程序获取微信运动步数的实例代码
Jul 20 Javascript
VueJs 搭建Axios接口请求工具
Nov 20 Javascript
判断jQuery是否加载完成,没完成继续判断的解决方法
Dec 06 jQuery
Angular2之二级路由详解
Aug 31 Javascript
node实现mock-plugin中间件的方法
Dec 25 Javascript
使用JavaScript实现网页秒表功能(含开始、暂停、继续、重置功能)
Jun 05 Javascript
Js Snowflake(雪花算法)生成随机ID的实现方法
Aug 26 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
防止MySQL注入或HTML表单滥用的PHP程序
2009/01/21 PHP
Laravel框架分页实现方法分析
2018/06/12 PHP
javascript获得CheckBoxList选中的数量
2009/10/27 Javascript
详解AngularJS中的http拦截
2016/02/09 Javascript
JS针对浏览器窗口关闭事件的监听方法集锦
2016/06/24 Javascript
js运动事件函数详解
2016/10/21 Javascript
Vue.js列表渲染绑定jQuery插件的正确姿势
2017/06/29 jQuery
Vue学习笔记进阶篇之函数化组件解析
2017/07/21 Javascript
vue.js框架实现表单排序和分页效果
2017/08/09 Javascript
JavaScript伪数组用法实例分析
2017/12/22 Javascript
详解vue表单——小白速看
2018/04/08 Javascript
Vue render深入开发讲解
2018/04/13 Javascript
JavaScript设计模式之原型模式分析【ES5与ES6】
2018/07/26 Javascript
基于layui数据表格以及传数据的方式
2018/08/19 Javascript
JS实现倒计时图文效果
2018/11/17 Javascript
Javascript 对象(object)合并操作实例分析
2019/07/30 Javascript
js实现漂亮的星空背景
2019/11/01 Javascript
[01:12:35]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
Python入门学习之字符串与比较运算符
2015/10/12 Python
批处理与python代码混合编程的方法
2016/05/19 Python
Python中functools模块的常用函数解析
2016/06/30 Python
使用pycharm生成代码模板的实例
2018/05/23 Python
Win系统PyQt5安装和使用教程
2019/12/25 Python
在Pytorch中使用Mask R-CNN进行实例分割操作
2020/06/24 Python
Ratchet 模态框的实现
2020/08/19 HTML / CSS
香港钟表珠宝首饰商城:OneMallTime网摩间
2016/10/14 全球购物
光电信息专业应届生求职信
2013/10/07 职场文书
农业生产宣传标语
2014/10/08 职场文书
个人贷款收入证明
2014/10/26 职场文书
2014年就业工作总结
2014/11/26 职场文书
2014年酒店年度工作总结
2014/12/10 职场文书
幼儿园教师自荐书
2015/03/06 职场文书
创业计划书之韩国烧烤店
2019/09/19 职场文书
使用Java去实现超市会员管理系统
2022/03/18 Java/Android
Win10多屏显示如何设置?Win10电脑多屏显示设置操作方法
2022/07/07 数码科技
Python如何将list中的string转换为int
2022/07/15 Ruby