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 相关文章推荐
jquery trim() 功能源代码
Feb 14 Javascript
javascript结合fileReader 实现上传图片
Jan 30 Javascript
JavaScript自定义等待wait函数实例分析
Mar 23 Javascript
jQuery插件bxSlider实现响应式焦点图
Apr 12 Javascript
javascript引用类型指针的工作方式
Apr 13 Javascript
json+jQuery实现的无限级树形菜单效果代码
Aug 27 Javascript
js判断是否是手机页面
Mar 17 Javascript
vue中的模态对话框组件实现过程
May 01 Javascript
JS插件clipboard.js实现一键复制粘贴功能
Dec 04 Javascript
vue基础之模板和过滤器用法实例分析
Mar 12 Javascript
vue+elementUI实现表格列的显示与隐藏
Apr 13 Vue.js
vue使用watch监听属性变化
Apr 30 Vue.js
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
PHP CURL获取cookies模拟登录的方法
2013/11/04 PHP
PHP异常Parse error: syntax error, unexpected T_VAR错误解决方法
2014/05/06 PHP
jquery 常用操作方法
2010/01/28 Javascript
JavaScript 弹出窗体点击按钮返回选择数据的实现
2010/04/01 Javascript
jQuery动画效果animate和scrollTop结合使用实例
2014/04/02 Javascript
jQuery中index()方法用法实例
2014/12/27 Javascript
js如何实现淡入淡出效果
2020/11/18 Javascript
ES6记录异步函数的执行时间详解
2016/08/31 Javascript
浅析Angular2子模块以及异步加载
2017/04/24 Javascript
JavaScript 上传文件(psd,压缩包等),图片,视频的实现方法
2017/06/19 Javascript
React Native使用fetch实现图片上传的示例代码
2018/03/07 Javascript
Vue使用高德地图搭建实时公交应用功能(地图 + 附近站点+线路详情 + 输入提示+换乘详情)
2018/05/16 Javascript
详解Ant Design of React的安装和使用方法
2018/12/27 Javascript
VUE安装使用教程详解
2019/06/03 Javascript
微信小程序返回上一级页面的实现代码
2020/06/19 Javascript
JavaScript中如何调用Java方法
2020/09/16 Javascript
python通过zlib实现压缩与解压字符串的方法
2014/11/19 Python
在Python中通过threading模块定义和调用线程的方法
2016/07/12 Python
利用Python批量生成任意尺寸的图片
2016/08/29 Python
python 读取excel文件生成sql文件实例详解
2017/05/12 Python
Python3+PyInstall+Sciter解决报错缺少dll、html等文件问题
2019/07/15 Python
Django发送邮件和itsdangerous模块的配合使用解析
2019/08/10 Python
Django 实现 Websocket 广播、点对点发送消息的代码
2020/06/03 Python
荷兰照明、灯具和配件网上商店:dmlights
2019/08/25 全球购物
大一学生假期实习的自我评价
2013/10/12 职场文书
应聘英语教师求职信
2014/04/24 职场文书
企业年度评优方案
2014/06/02 职场文书
社区志愿者活动方案
2014/08/18 职场文书
怀孕辞职信怎么写
2015/02/28 职场文书
2015年学校政教处工作总结
2015/05/26 职场文书
后天观后感
2015/06/08 职场文书
2015年大学生暑期实习报告
2015/07/13 职场文书
年终奖金发放管理制度,中小企业适用,拿去救急吧!
2019/07/12 职场文书
浅谈移动端中的视口(viewport)的具体使用
2021/04/13 HTML / CSS
zabbix监控mysql的实例方法
2021/06/02 MySQL
开发者首先否认《遗弃》被取消的传言
2022/04/11 其他游戏