Ajax和形式+ iframe怎么实现文件上传

  介绍

这篇文章将为大家详细讲解有关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/碧峤弧?   

我们点击提交,可以看到下面的请求:

 Ajax和形式+ iframe怎么实现文件上传

已经把文件上传。那么,加入这个上传。php接口可用,而且假如上传成功后,会返回:

Ajax和形式+ iframe怎么实现文件上传