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中setAttribute用法介绍
Jul 20 Javascript
javascript遍历控件实例详细解析
Jan 10 Javascript
wap手机图片滑动切换特效无css3元素js脚本编写
Jul 28 Javascript
jQuery实现div随意拖动的实例代码(通用代码)
Jan 28 Javascript
AngularJS 过滤器(自带和自建)详解
Sep 19 Javascript
BootstrapValidator超详细教程(推荐)
Dec 07 Javascript
js+div+css下拉导航菜单完整代码分享
Dec 28 Javascript
微信小程序开发图片拖拽实例详解
May 05 Javascript
js图片轮播插件的封装
Jul 21 Javascript
使用vue-router设置每个页面的title方法
Feb 11 Javascript
关于redux-saga中take使用方法详解
Feb 27 Javascript
JavaScript实现图片放大预览效果
Nov 02 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与Java的时间类型
2013/06/22 PHP
php判断正常访问和外部访问的示例
2014/02/10 PHP
CodeIgniter常用知识点小结
2016/05/26 PHP
Laravel框架模板加载,分配变量及简单路由功能示例
2018/06/11 PHP
php+ajax实现商品对比功能示例
2019/04/13 PHP
TNC vs IO BO3 第一场2.13
2021/03/10 DOTA
csdn 博客的css样式 v3
2009/02/24 Javascript
JavaScript toFixed() 方法
2010/04/15 Javascript
javascript实现切换td中的值
2014/12/05 Javascript
jQuery处理json数据返回数组和输出的方法
2015/03/11 Javascript
javascript中Date format(js日期格式化)方法小结
2015/12/17 Javascript
使用bootstrapValidator插件进行动态添加表单元素并校验
2016/09/28 Javascript
html5 canvas 详细使用教程
2017/01/20 Javascript
jQuery实现淡入淡出的模态框
2017/02/09 Javascript
使用jQuery实现鼠标点击左右按钮滑动切换
2017/08/04 jQuery
Angular如何在应用初始化时运行代码详解
2018/06/11 Javascript
JavaScript中arguments和this对象用法分析
2018/08/08 Javascript
解决vue打包css文件中背景图片的路径问题
2018/09/03 Javascript
NodeJS服务器实现gzip压缩的示例代码
2018/10/12 NodeJs
微信小程序整合使用富文本编辑器的方法详解
2019/04/25 Javascript
详解JS判断页面是在手机端还是在PC端打开的方法
2019/04/26 Javascript
python备份文件以及mysql数据库的脚本代码
2013/06/10 Python
一个检测OpenSSL心脏出血漏洞的Python脚本分享
2014/04/10 Python
Python使用pymysql小技巧
2017/06/04 Python
Python3实现简单可学习的手写体识别(实例讲解)
2017/10/21 Python
Python中defaultdict与lambda表达式用法实例小结
2018/04/09 Python
HTML5之SVG 2D入门1—SVG(可缩放矢量图形)概述
2013/01/30 HTML / CSS
周年庆典邀请函范文
2014/01/24 职场文书
2016中学教师读书心得体会
2016/01/13 职场文书
2016年秋季趣味运动会开幕词
2016/03/04 职场文书
《钢铁是怎样炼成的》高中读后感
2019/08/07 职场文书
高中语文教材(文学文化常识大全一)
2019/08/13 职场文书
浅谈Java实现分布式事务的三种方案
2021/06/11 Java/Android
python中对列表的删除和添加方法详解
2022/02/24 Python
vue项目配置sass及引入外部scss文件
2022/04/14 Vue.js
Python使用pandas导入csv文件内容的示例代码
2022/12/24 Python