在.NET 2.0,或.NET3.5使用服务器控件或HTML控件FileUpload时,在读取路径名时,会发现路径名中间部分会被/fakepath/代替。如选择的C:/Documents and Settings/Shirley/桌面/dyangquan.xml,读取得到的是C:/fakepath/dyangquan.xml.这于IE7.0,IE8.0有关。
解决方案:
用javascript读取(如服务器端也要用到,则用一个hidden文本进行存储)
var isIE = (document.all) ? true : false;
var isIE7 = isIE && (navigator.userAgent.indexOf('MSIE 7.0') != -1);
var isIE8 = isIE && (navigator.userAgent.indexOf('MSIE 8.0') != -1);
var isMozilla = /mozilla/.test( navigator.userAgent ) && !/(compatible|webkit)/.test( navigator.userAgent );
var isOpera = /Opera/.test( navigator.userAgent );
//hidden文本
var thehid=document.getElementById("hidthepath");
if(isIE7 || isIE8){
thehid.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='hidden')"
}
function ReadPath()
{
var thefile=document.getElementById("fileUpload");//读取fileUpload文件值
var thepath=thefile.value;
if(isIE7 || isIE8){//如果是E7 || isIE8
thefile.select();
var thepath=document.selection.createRange().text;
document.selection.empty();
}else if(isMozilla){
thepath = thefile.files[0].getAsDataURL();
}
thehid.value=thepath;//放于hidden文件
var strRegex = "(.xml|.XML)$"; //判断用户选择的文件是否为xml文件
var re=new RegExp(strRegex);
if (re.test(thepath))
{
//验证成功
}
else
{ //验证不成功
}
}