免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3119 | 回复: 0
打印 上一主题 下一主题

JS获取fileupload文件路径 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-07-21 21:40 |只看该作者 |倒序浏览
JS获取fileupload文件路径
最近在写个小网站,用到了fileupload控件来上传文件。因为程序的某些需要,要获取上传文件的本地路径,在CS代码中使用的是 fileupload1.PostedFile.FileName,结果发现得出来的只是文件名,不包含路径,记得以前确实是用这样的方法取得过路径的。
于 是上网搜索了下,原来是因为高版本的浏览器设定为了安全起见,已经不会显示文件路径。只有想办法用JS来获取路径了,测试了一下后发现。单独只是使用 document.getElementById("fileupload1".value,在IE6里可以获取全路径,在IE7,IE8及火狐里都是 只能获得文件名。
后来在网上找到了解决办法,IE7,IE8可以用如下代码获取文件路径

程序代码

//判断浏览器类型
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 file=document.getElementById("fileupload1";
if(isIE7 || isIE
{
file.select();
var path=document.selection.createRange().text;
document.selection.empty();
}

但是在火狐下还是没办法获取文件路径,看到网上有人说用getAsDataURL()方法可以获取路径。我测试了一下,用这个方法确实是可以获得路径,但是些路径是被加密过的。于是继续寻找其他方法。。。
火狐下获取上传文件路径的方法,需要先修改设置。在地址栏输入about:config,然后修改signed.applets.codebase_principal_support的键值,将值修改为true。然后再使用如下代码,就可以获得文件路径。



程序代码
try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect";
}
catch (e) {
alert('请更改浏览器设置');
return;
}

var fname = document.getElementById("fileupload1".value;
var file = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);
try {
// Back slashes for windows
file.initWithPath( fname.replace(/\//g, "\\\\" );
}
catch(e) {
if (e.result!=Components.results.NS_ERROR_FILE_UNRECOGNIZED_PATH) throw e;
alert('无法加载文件');
return;
}

alert(file.path);  //取得文件路径


运行以上代码时,浏览器会弹出警告,选择”是“之后,即可获得路径。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP