手机版

详解埃阿斯和表单内联框架实现文件上传的方法(两种方式)

时间:2021-11-03 来源:互联网 编辑:宝哥软件园 浏览:

自从有html5之后,文件上传变的非常简单。很方便的解决了项目中需要用到的文件上传功能HTML5。支持多图片上传,而且支持创建交互式、快速动态网页应用的网页开发技术上传,而且支持上传之前图片的预览,而且支持图片拖拽上传,而且还是纯粹利用文件控件实现,JS代码寥寥,想不让人称赞都难啊!

HTML5Ajax上传

html5的上传实现,是需要文件控件以及XMLHttpRequest请求。下面是我封装的一个上传插件:

函数文件上传(选项){ var opts=options | | { };var func=function(){ };这个。文件输入=opts。文件输入| | null这个。URL=opts。URL | |这个。file list=[];这个。onfilter=opts。onfilter | | function(f){ return f;};//选择文件组的过滤方法这个。OnSelect=opts。OnSelect | | func//文件选择后这个。OnProgress=opts。OnProgress | | func//文件上传进度这个。成功=选择。成功时| | func//文件上传成功时这个。onfailure=opts。onfailure | | func//文件上传失败时;这个。on complete=opts关于完全| | func//文件全部上传完毕时这个。init();}文件上传。prototype={ deal files : function(e){//获取要上传的文件数组(用户选择文件后执行)var文件=e . target。文件| | e .数据传输。文件;this.fileList=this.onFilter(文件);对于(var i=0,文件;文件=这个。文件列表[I];i ){ //增加唯一索引值文件。指数=I;}这个。OnSelect(这个。FileList);归还这个;},removeFile:函数(文件删除){ //删除某一个文件var arrFile=[];对于(var i=0,文件;文件=这个。文件列表[I];i ){if (file!=文件删除){ arrfile。推送(文件);} }这个。文件列表=arr文件;归还这个;},removeAll:函数(){ //清空文件队列这个。file list=[];归还这个;},上传文件:函数(){ //上传文件var me=thisfor(var i=0,文件;文件=这个。文件列表[I];我){(函数(文件){ var formData=new formData();var xhr=new XMLHttpRequest();if(xhr。上传){ xhr。上传。addeventlistener(' progress ',函数(e) { //上传中me.onProgress(文件e .已加载,e .总计);},false);xhr。onreadystatechange=function(e){//文件上传成功或是失败if(xhr。readystate==4){ if(xhr。status==200){ me。onsuccess(文件,xhr。response text);me.removeFile(文件);if(!我。文件列表。长度){我。on complete();//上传全部完毕。执行回调}} else {me.onFailure(文件,xhr。response text);}}};//开始上传formData.append('file ',file);xhr.open('POST ',me.url,true);xhr。发送(表单数据);}})(文件);}},init : function(){ var me=this;//文件选择控件选择如果(我。文件输入){ me。文件输入。addeventlistener(' change '),函数{我。交易文件(e);},false);}}};相信大家也看到了,代码中出现了表单数据,这就是html5的神奇之处了。借助上传轻松实现异步无刷新支持预览图片的多文件上传功能。而且,令人欣慰的是,现在已经有很多浏览器都已经支持html5了。

但是!ie9以下的版本不支持呀!

除此之外,上面的方法还有一个弊端,因为使用了创建交互式、快速动态网页应用的网页开发技术的上传方式,所以不能支持跨域上传,如果必须要满足这两个业务场景,那就试试下面的方法吧,借助形式和内联框架来实现上传。下面来详细看一下:

形式表单提交到内联框架

超文本标记语言代码:

iframe name=' Demoiframe ' style=' display : none '/iframe form target=' Demoiframe ' action=' upload。PHP ' method=' post ' enctype=' multipart/form-data ' input class=' filename ' type=' file ' name=' file label ' input type=' submit ' value='提交/form我们点击提交,可以看到下面的请求:

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

{'code' :' 200 ',' success' : true,' data ' : }.}}我们如何获取下一步的返回值?因为我们将它上传到了iframe,所以我们只需要监控iframe的加载事件。如果有返回值,我们可以得到它进行进一步的处理。看看js代码:

$(“iframe”)。on('load ',function(){ var responseText=$(' iframe ')[0]. content document . body . textcontent;var response data=JSON . parse(response text)| | { };if(response data . issucess==true | | response data . code==200){//success } else {//error } });这样,我们就完成了一个支持所有浏览器的文件上传操作。非常感谢您对我们网站的支持!

版权声明:详解埃阿斯和表单内联框架实现文件上传的方法(两种方式)是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。

相关文章推荐