IE8下服务端获取客户端文件的路径为C:/fakePath问题的解决方案

上一篇文章上提到,IE8下服务端获取客户端文件的路径时,会变成C:/fakePath问题,于是乎通过文件路径去获得文件大小就失败了。

上网搜了一下,主要原因是IE8因为安全考虑,在上传文件时屏蔽了真实路径,用C:/fakePath代替。

 

一、可以通过设置浏览器安全选项得到真实路径:

  Internet选项 -> 安全 -> 自定义级别 -> 将本地文件上载至服务器时包含本地目录路径 -> 选“启动” -> 确定  

但是,作为开发者,我们不能指望客户去这么做,所以我们必须通过代码解决这个问题。(参考文章:http://yunzhu.iteye.com/blog/1116893

 

二、通过selection.createRange().text方式获取路径

代码如下:

//获取文件路径,解决在IE8下由于安全问题,服务端获取客户端文件的路径为C:/fakePath问题
        function getPath(obj){  //参数obj为input file对象
            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;
            }  
        }

以上代码在IE6\7\8下可以正常访问,但在IE9下,document.selection.createRange()拒绝访问,可能是IE的安全性有所提高导致。

经过谷歌搜索之后,网上提供的解决方案是:在IE9下,如果file控件获得焦点,则document.selection.createRange()拒绝访问,因此,只需要在obj.select()后面加一句obj.blur()即可。

 

posted @ 2013-12-17 16:51  RyanChan  阅读(1737)  评论(1编辑  收藏  举报