关于IE9上传文件无法进入后台问题的原因及解决

作者:操作系统

jQuery 关于IE9上传文件不能够进去后台问题的来由及化解办法(ajaxfileupload.js第四弹卡塔尔,jqueryie9

第四弹的出生完全不在本身最早的安顿个中,是有个网络朋友看了原先有关《ajaxfileupload.js种类》的随笔后提出的标题,由于自个儿一贯是用chrome浏览器去测验demo,完全忽略IE浏览器(其实是画蛇著足的,懒得想浏览器宽容的难题,哈哈~卡塔尔国,所以当笔者利用IE9去运作demo的时候,确实开掘了千篇豆蔻梢头律的问题,就是ajax异步提交表单不能够进去后台。

下边是消除一切难点的过程,以自己在《jQuery 自制上传头像插件-附带德姆o实例(ajaxfileupload.js第三弹卡塔尔国》中上传的demo为基准,那样会尤其轻巧领会一些。

纵然如此总体难题的表面现象是ajax异步提交表单不恐怕步入后台,但是当自家在浏览器中跟代码走一回的时候,发掘的第3个难题便是底下的唤起。

金冠53777 1

现身那一个主题材料的原故其实要归罪于

function getFilePath(obj) {
    if (obj) {
        if (window.navigator.userAgent.indexOf("MSIE") >= 1) {
            obj.select();
            return document.selection.createRange().text;
        }
        else if (window.navigator.userAgent.indexOf("Firefox") >= 1) {
            if (obj.files) {
                return obj.files.item(0).getAsDataURL();
            }
            return obj.value;
        }
        return obj.value;
    }
}

其大器晚成函数,最先加那个函数的时候是为着能够宽容,不巧,却适得其反了。

其大器晚成函数是从英特网从来贴下来的,那时固然怕两样浏览器直接用$().val()得不到接收的文件名称。然则当使用IE浏览器时,实际上这段代码重回的document.selection.createRange().text这几个是一个“”(空字符串卡塔尔,所以那块能够间接行使obj.value或许没有须要使用那么些方式,直接通过$().val()得到文件名就能够。

而令本人惊喜的是,在IE下使用$().val()居然能收获文件的完全路径!!!而不单单只是三个文件名,那样就毫无先上传再预览了,能够直接预览图片了。

其一难点解决了,重国民党的新生活运动行代码,现身

金冠53777 2

这些难点的来由是在jQuery-1.4.2插件之后,已经去掉了handleError的艺术,而下载了demo的相爱的人会发掘,demo中动用的是jQuery-2.0.3插件。那么是还是不是把jQuery插件换一下就能够了?不行。因为之所以用jQuery-2.0.3是因为独有在jQuery-1.7版本之后才支撑delegate方法,但是大家能够在ajaxfileupload.js插件中步入handleError方法。copy上边代码到ajaxfileupload.js就足以了

    handleError: function( s, xhr, status, e )         {
        // If a local callback was specified, fire it
        if ( s.error ) {
            s.error.call( s.context || s, xhr, status, e );
        }

        // Fire the global callback
        if ( s.global ) {
            (s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError", [xhr, s, e] );
        }
    }

本条标题一下子就解决了了,再度重国民党的新生活运动行代码,现身

金冠53777 3

到此处实在正是那篇小说的要害了,展开浏览器跟了少年老成晃,正是在

jQuery(form).submit();

此地抛出了要命。

原因是那样的,IE出于安全性的思忖,上传文件时务要求点击<input type=’file’>控件本人技能上传成功。而因为<input type=’file’>长的其实太丑,超少能满意大家的审美,大家普通都以会暗藏它,然后用其余的button去接触它。而如此做在IE9下是不被允许的。

关于驱除办法,假诺大家坚韧不拔用越来越精良的上传控件,这我觉着用一些css的技巧吧,把<input type=’file’>控件遮挡下哪些的,这么些依然要依附实况来定,说来相比较恶心,就一个IE9,破坏了别样浏览器的调治将养,真是叫人抓心挠肝。

对于在此以前的demo,假设把<input type=’file’>显示出来,那么相应的后台也要开展一下校正,首要依然收获文件名的一些

要将

System.Web.HttpContext.Current.Request.Files[0].FileName

改成

System.IO.Path.GetFileName(System.Web.HttpContext.Current.Request.Files[0].FileName))

因为那个时候的System.Web.HttpContext.Current.Request.Files[0]金冠53777,.FileName是四个安然无恙的文书路线,而不单单是四个文本名。

金冠53777 4

自然,借使大家不想把图片先save到本地的话,可以直接用图片路线去预览,但是要知道,这些只切合IE呀~~所以,大家温馨斟酌。

 

关于这些<input type=’file’>控件在IE9下能或必须要要被实际点击能力上传的难点,笔者想一定有别的消亡的点子,希望知道的敌人能够享用一下。

 

异彩纷呈分享:

《ASP.NET 使用ajaxfileupload.js插件现身上传十分的大文件战败的缓慢解决办法(ajaxfileupload.js第一弹卡塔 尔(阿拉伯语:قطر‎》

《jQuery 关于ajaxfileupload.js插件的慢慢剖判(ajaxfileupload.js第二弹卡塔尔国》

《jQuery 自制上传头像插件-附带德姆o实例(ajaxfileupload.js第三弹卡塔尔国 》

选取jquery的ajaxfileuploadjs与struts2无刷新上传文件出错

getXXX方法是从session中取参数值,从你贴出的代码来看 未有涉及到那块,所以我感觉您风度翩翩旦用System.out.println("userIcon:" + getId_userIcon()); 取不到别的id·
村办浅见~  

ajaxfileUploadjs 中jQuery(form)submit(); ie后还没到去后台,别的浏览器都得以,为什么

file接受文件的事件簿是有file文件直接触及的,那些场地笔者原先也越过过:
开创三个button 点击时候新扩张三个file控件,然后file.click()
这种做法除IE以外的浏览器都不曾问题,但在IE里面必需点击file文件本人工夫够上传成功,安全难点大家都懂的,笔者就不解释了。
拍卖形式,创造多个file直接点击file控件触发布文书件接纳,即使以为file长得不狼狈,OK 全体晶莹剔透它 然后装置你想要的体制, 聪明人 你应该明了。 附图两张:(此与后台从未提到卡塔 尔(阿拉伯语:قطر‎

图表一贯传不上去,要的话 作者邮件发你!

附:这么费劲的敲不给分就过意不去啊!!!  

关于IE9上传文件不可能进去后台难点的由来及解决办法(ajaxfileupload.js第四弹卡塔 尔(阿拉伯语:قطر‎,jqueryie9 第四弹的落榜完全不在自身最先的布置此中,是...

本文由金冠53777-金冠娱乐53777-Welcome发布,转载请注明来源

关键词: