1次ajax请求(XMLHttpRequest)上传多个文件,支持进度条
来源:互联网 发布:java获取form表单数据 编辑:程序博客网 时间:2024/05/22 19:32
封装了一个ajax多文件上传,功能就是选择多个文件,用ajax上传。
调用方式也很简单,写一个json对象做为参数配置,设置要上传的服务端url以及选择文件和上传完成等的事件处理函数,new一个AjaxUploadX对象,调用selectFiles方法选择文件,调用uplaod方法上传。
支持的浏览器:Firefox、Chrome、Safari、Opera
使用截图:
调用方法示例:
<button id="btnSelectFiles">选择文件</button><button id="btnUpload">上传</button><ol id="filesView"></ol><script> var config = { url : "saveupload.php", formname : "uploadedfile[]", onselectfiles : function (files){ var s = ''; for(var i=0, n=files.length;i<n;i++){ s += '<li>' + files[i].name + ' ('+files[i].size+' bytes)' + '</li>'; } document.getElementById("filesView").innerHTML = s; }, onload : function(e) { alert(e.target.responseText); }, uploadHandlers : { progress : function(e){} } }; var aux = new AjaxUploadX(config); document.getElementById("btnSelectFiles").onclick = function (){ aux.selectFiles(); } document.getElementById("btnUpload").onclick = function (){ aux.upload(); }</script>
封装类的源码如下:
/* *----------------------------* AjaxUploadX* 功能: 1次ajax请求(XMLHttpRequest)上传多个文件* 作者: Igin Cui, 2012/8/20* 联系我: @IginCui (新浪微博)* cuixiping@yeah.net* http://blog.csdn.net/cuixiping*----------------------------*//* 本例在Firefox 14, Chrome 20测试通过,未测试其他浏览器 *//* IE9不支持files特性,所以本例不支持IE9 */function AjaxUploadX(ops){ if(!window.FormData || !window.FileList){ //throw('Your browser does not support ajax upload'); throw('您的浏览器不支持ajax upload'); } this.options = ops||{}; this._init();}AjaxUploadX.prototype = { _init: function (){ var ele = document.createElement('input'); ele.multiple=this.options.multiple!==false; ele.type='file'; ele.style.display='none'; document.body.appendChild(ele); var THIS = this; ele.onchange = function (e){ THIS._onchange(e); } this._input = ele; }, _destroy: function (){ document.body.removeChild(this._input); }, _onchange: function (e){ var ops = this.options; if(ops.onselectfiles){ ops.onselectfiles(e.target.files); } }, selectFiles: function (){ this._input.click(); }, upload: function (){ var xhr = new XMLHttpRequest(); var ops = this.options; var v, h, evs = {loadstart:0, loadend:0, progress:0, load:0, error:0, abort:0}; for(v in evs){ if(h = ops['on'+v]){ xhr.addEventListener(v, h, false); } if(ops['uploadHandlers'] && (h = ops['uploadHandlers']['on'+v])){ xhr.upload.addEventListener(v, h, false); } } var data = new FormData(); var files = this._input.files; if(!files.length){ this.options.onerror('No files'); return; } for(var i=0, n=files.length;i<n;i++){ data.append(ops.formname || "uploadedfile[]", files[i]); } xhr.open("POST", ops.url, true); xhr.send(data); }};
源码以及demo下载
demo中包含封装类,调用示例html,js,保存上传文件的php.
新浪微博: @IginCui
~~
- 1次ajax请求(XMLHttpRequest)上传多个文件,支持进度条
- XMLHttpRequest上传文件实现进度条
- ajax 文件上传进度条
- XMLHTTPRequest实现带进度条的文件上传
- XMLHttpRequest上传文件,并显示进度条
- XMLHttpRequest文件上传,并显示进度条
- ajax 上传 带 进度条 可多文件
- jquery ajax多文件上传,进度条
- php+ajax文件上传进度条
- php+ajax文件上传进度条
- Ajax Upload--文件上传进度条
- ajax上传文件进度条实现
- php+ajax文件上传进度条
- AJAX+H5 上传文件+进度条
- Ajax文件上传,显示进度条
- ajax实现上传文件进度条
- ajax实现文件上传进度条
- 用ajax上传文件(XMLHttpRequest)
- DirectShow学习之三媒体播放过程分析
- C函数返回局部变量
- vs2005无法断点调试网站,断点失效 IE8 .
- 用到的函数
- c#获得网站访问来源地址
- 1次ajax请求(XMLHttpRequest)上传多个文件,支持进度条
- 延时加载问题解决OpenSessionInViewInterceptor 和 OpenSessionInViewFilter的配置
- android 相对布局覆盖问题
- c# 判断字符串在一段文字中出现的次数
- Android 性能优化的一些方法
- NSString的属性相关
- 静态成员变量与静态成员函数
- 项目中遇到关于OpenSessionInViewFilter的默认sessionFactoryBeanName的问题
- java遍历目录结构