firefox获取不到html标签的file控件的完整路径...
时间:2010-08-15 来源:HelloAnyone
相信很多人都使用过>input type="file"/<这样的HTML控件,它看起来非常普通,是我们在做Web应用程序中用于上传客户端本地文件时不可缺少的控件,然而最近 我发现这个控件在最新的FireFox浏览器(或者最新的IE8中也会存在这个问题,我没有尝试过,读者可以试一下)中却失去了效果,导致我们在通过这个 控件的value属性得到的值中只包含了文件名而没有文件路径,这个在IE7中是可以正常获取到全文件名的(即文件完整路径+文件名)。IE7和大部分当 前流行的浏览器(如FireFox2版本)都可以获取到文件的路径,但是FireFox3却不行,现在给出一点解法:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>path file Page</title>
<script type="text/javascript">
function readFile(fileBrowser) {
if (navigator.userAgent.indexOf("MSIE")!=-1) {
readFileIE();
}else if (navigator.userAgent.indexOf("MSIE")!=-1) {
readFileIE(fileBrowser);
} else if (navigator.userAgent.indexOf("Firefox")!=-1 || navigator.userAgent.indexOf("Mozilla")!=-1) {
readFileFirefox(fileBrowser);
} else {
alert("Not IE or Firefox (userAgent=" + navigator.userAgent + ")");
}
}
function readFileIE(){
alert(document.form1.fileBrowser.value.toString());
}
function readFileFirefox(fileBrowser) {
try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
} catch (e) {
alert("Unable to access local files due to browser security settings");
}
var fileName=fileBrowser.value;
alert(fileName);
}
</script>
</head>
<body>
<form name="form1">
Browse to select a file
<input type="file" name="fileBrowser" size="125" onchange="readFile(this)" />
</form>
</body>
</html>
首先我们需要判断用户浏览器的类型来选择执行不同的function,IE中直接调用Scripting.FileSystemObject这个 ActiveXObject,不过如果用户的IE没有打开“对未标记为可安全执行脚本的ActiveX控件初始化并执行脚本”的话是不能执行这行代码的, 在脚本中给出了提示,告诉用户必须将这个选项打开。 IE的问题不大,因为我们完全可以直接使用input的value值得到文件的路径,这里给出的方法主要是可以得到文件的二进制数据,重点看看在 FireFox3中是如何做的。FireFox3中需要用户在配置页面中添加一个名称为 signed.applets.codebase_principal_support的键值,将值设为true,然后就可以通过代码中给出的方法得到文 件的本地路径了,同样也可以得到文件的二进制数据。
有 关about:config和如何配置FireFox浏览器,读者可以参考下面的链接: http://www.cnblogs.com/looky/archive/2008/03/18/1111859.html 这样,我的问题就可以解决了,不管是在IE中,还是在FireFox中,我都可以获取到用户所选文件的本地路径,然后保存在页面的隐藏域中,当用户提交页 面时,服务器端代码便可以通过页面隐藏域中的值得到用户所选择的文件的路径,从而上传文件到服务器。