上一篇文章上提到,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()即可。