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之十四 (触发事件核心方法)
Aug 23 Javascript
基于jquery的simpleValidate简易验证插件
Jan 31 Javascript
基于jquery实现省市区三级联动效果
Dec 25 Javascript
js实现弹窗居中的简单实例
Oct 09 Javascript
jQuery zTree树插件简单使用教程
Jan 10 Javascript
基于Vue实例对象的数据选项
Aug 09 Javascript
React 组件转 Vue 组件的命令写法
Feb 28 Javascript
微信小程序实现tab页面切换功能
Jul 13 Javascript
详解微信小程序框架wepy踩坑记录(与vue对比)
Mar 12 Javascript
Vue.js@2.6.10更新内置错误处机制Fundebug同步支持相应错误监控
May 13 Javascript
javascript面向对象程序设计实践常用知识点总结
Jul 29 Javascript
Vue.use()在new Vue() 之前使用的原因浅析
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
PHP is_dir() 判断给定文件名是否是一个目录
2010/05/10 PHP
需要注意的几个PHP漏洞小结
2012/02/05 PHP
PHP中实现Bloom Filter算法
2015/03/30 PHP
PHP的邮件群发系统phplist配置方法详细总结
2016/03/30 PHP
php短信接口代码
2016/05/13 PHP
微信自定义分享php代码分析
2016/11/24 PHP
php+mysql+jquery实现简易的检索自动补全提示功能
2017/04/15 PHP
老生常谈PHP面向对象之命令模式(必看篇)
2017/05/24 PHP
jQuery 页面 Mask实现代码
2010/01/09 Javascript
JavaScript定义类和对象的方法
2014/11/26 Javascript
jQuery自定义添加&quot;$&quot;与解决&quot;$&quot;冲突的方法
2015/01/19 Javascript
JavaScript判断一个字符串是否包含指定子字符串的方法
2015/03/18 Javascript
EasyUI 结合JS导出Excel文件的实现方法
2016/11/10 Javascript
JS中如何实现Laravel的route函数详解
2017/02/12 Javascript
实现两个文本框同时输入的实例
2017/09/25 Javascript
原生js封装运动框架的示例讲解
2017/10/01 Javascript
vue.js语法及常用指令
2017/10/29 Javascript
JS实现点击复选框变更DIV显示状态的示例代码
2017/12/18 Javascript
vue代码分割的实现(codesplit)
2018/11/13 Javascript
Puppeteer 爬取动态生成的网页实战
2018/11/14 Javascript
JS FormData对象使用方法实例详解
2020/02/12 Javascript
js实现无缝轮播图插件封装
2020/07/31 Javascript
多种类型jQuery网页验证码插件代码实例
2021/01/09 jQuery
[01:38]完美世界DOTA2联赛PWL S3 集锦第四期
2020/12/21 DOTA
Python读写Json涉及到中文的处理方法
2016/09/12 Python
python爬取亚马逊书籍信息代码分享
2017/12/09 Python
基于python 微信小程序之获取已存在模板消息列表
2019/08/05 Python
Python基于Socket实现简单聊天室
2020/02/17 Python
Python基础之列表常见操作经典实例详解
2020/02/26 Python
python爬虫开发之urllib模块详细使用方法与实例全解
2020/03/09 Python
社区版pycharm创建django项目的方法(pycharm的newproject左侧没有项目选项)
2020/09/23 Python
会计电算化应届生求职信
2013/11/03 职场文书
2015年普法依法治理工作总结
2015/05/26 职场文书
Java Optional<Foo>转换成List<Bar>的实例方法
2021/06/20 Java/Android
vue3不同环境下实现配置代理
2022/05/25 Vue.js
CSS SandBox应用场景及常见问题
2022/06/25 HTML / CSS