介绍
这篇文章将为大家详细讲解有关Ajax和形式+ iframe怎么实现文件上传,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
<强> HTML5Ajax上传强> <强>
强>
html5的上传实现,是需要文件控件以及XMLHttpRequest请求。下面是我封装的一个上传插件:
function fileUpload(选项),{ var opts =, options | |, {}; var func =,()函数,{}; 时间=this.fileInput opts.fileInput | |,空; 时间=this.url opts.url | |, & # 39; & # 39;; 时间=this.fileList []; 时间=this.onFilter opts.onFilter | |,函数(f), {return f;},,//选择文件组的过滤方法 时间=this.onSelect opts.onSelect | |, func;,//文件选择后 时间=this.onProgress opts.onProgress | |, func;,//文件上传进度 时间=this.onSuccess opts.onSuccess | |, func;,//文件上传成功时 时间=this.onFailure opts.onFailure | |, func;,//文件上传失败时; 时间=this.onComplete opts.onComplete | |, func;,//文件全部上传完毕时 this.init (); } fileUpload.prototype =, { dealFiles:函数(e),{,//获取要上传的文件数组(用户选择文件后执行) var files =, e.target.files | |, e.dataTransfer.files; 时间=this.fileList this.onFilter(文件); (var 小姐:=,0,,文件;,file =, this.fileList[我];,我+ +){,//增加唯一索引值 file.index =,我; } this.onSelect (this.fileList); return ; }, removeFile:函数(fileDelete),{,//删除某一个文件 var arrFile =, []; (var 小姐:=,0,,文件;,file =, this.fileList[我];,我+ +){ if (file !=, fileDelete), { arrFile.push(文件); } } 时间=this.fileList arrFile; return ; }, removeAll:函数(),{,//清空文件队列 时间=this.fileList []; return ; }, 还是:函数(),{,//上传文件 var me =,; (var 小姐:=,0,,文件;,file =, this.fileList[我];,我+ +){ (函数(文件),{ var formData =, new FormData (); var xhr =, new XMLHttpRequest (); if (xhr.upload), { xhr.upload.addEventListener (“progress",函数(e),{,//上传中 me.onProgress(文件,e.loaded, e.total); },,假); 时间=xhr.onreadystatechange 函数(e),{,//文件上传成功或是失败 if (xhr.readyState ==, 4), { if (xhr.status ==, 200), { me.onSuccess(文件,xhr.responseText); me.removeFile(文件); if (! me.fileList.length), { me.onComplete();,//上传全部完毕。执行回调 } },{else me.onFailure(文件,xhr.responseText); } } };//,开始上传 formData.append(& # 39;文件# 39;,,文件); xhr.open (“POST", me.url,,真的); xhr.send (formData); } })(文件); } }, 初始化:函数(),{ var me =,;//文件选择控件选择 if (me.fileInput), { me.fileInput.addEventListener (“change",函数(e), {, me.dealFiles (e);,},,假); } } };
相信大家也看到了,代码中出现了formData,这就是html5的神奇之处了。借助formData轻松实现异步无刷新支持预览图片的多文件上传功能,而且,令人欣慰的是,现在已经有很多浏览器都已经支持html5了。
但是! ! ! ie9以下的版本不支持呀! !
除此之外,上面的方法还有一个弊端,因为使用了ajax的上传方式,所以不能支持跨域上传,如果必须要满足这两个业务场景,那就试试下面的方法吧,借助形式和iframe来实现上传。下面来详细看一下:
<强>形式表单提交到iframe
强>
<强> html代码:
强>
& lt; iframe name=癲emoIframe",祝辞& lt;/iframe> & lt; form 目标=癲emoIframe", action=皍pload.php",方法=皃ost", enctype=岸嗖糠?form-data"比; & lt; input 类=癴ilename",类型=癴ile", name=癴ileLabel"比; & lt; input 类型=皊ubmit", value=https://www.yisu.com/zixun/碧峤弧? 形式>
我们点击提交,可以看到下面的请求:
已经把文件上传。那么,加入这个上传。php接口可用,而且假如上传成功后,会返回: