C:\fakepath 问题


又一次遇到 C:\fakepath径问题,特此记录一下。

原因大体来说就是:浏览器为了安全,不暴露客户端的完整文件路径。所以获取的文件路径都会是 C:\fakepath\XX\XX.xx之类的路径,不是我们想要的完整路径。

第一次遇到的时候忘记了是如何解决的了,可能是模糊记得通过网上的方法把问题给解决了。这一次在做上传的时候又遇到了该问题,google了一下,网上的解决办法主要分为2种:

第一种是修改浏览器安全级别,工具 -> Internet选项 -> 安全 -> 自定义级别 -> 找到“其他”中的“将本地文件上载至服务器时包含本地目录路径”,选中“启用”即可

这种方式可以解决但是不是根本之道。


第二种是通过JS获取真实的路径。说实话,我现在这个,通过网上的现成代码没有解决我的问题。网上的现成代码,下面的这段比较多:

//获取真实路径
function getPath(obj) {
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;
}
}


注:我的浏览器是IE10,谷歌浏览器以及火狐。

上面的这段代码不完全起作用。说不完全主要是因为,我使用了前台框架,这个框架本身就有点兼容性问题,所以我不能完全否定这段代码是否在别人的系统里面可以使用。其次就是,我在这个代码基础上修改了,可以解决我IE下的路径获取。

我参考了上面代码的思路:获取选中的文本。通过这个来获取完整路径。,先看下选择了文件之后的截图:


这个截图是我使用了前台页面框架后的截图,选了文件之后,路径显示的是浏览器保护了之后的路径。

接着看下,普通的文件上传,选择文件后的样子:


,这样其实是显示了真实的路径,但是通过代码获取的时候是获取不到这个路径的,还是会存在C:\fakepath问题。然后我通过JS不断的获取这个真实的路径,但是出来的都是带有C:\fakepath的路径。

根据上面的那段JS代码,测试发现,如果选中了路径的话,通过document.selection.createRange().text;可以获取到这个真实的路径。

但要注意一点,我这里直接使用上面那段JS代码不起作用的原因就是,多次调用了.select();这个方法。

接下来是我自己的代码了,可以提供参考下:(我只做了IE的,因为我这个前台框架的这个版本的上传只支持IE,其余的浏览器我没有做,调试了半天也没有解决兼容问题,就放弃了。)

$(function(){
$('#file').change(function(){
$(this).select();
});

$('#import_').click(function(){
var realpath = '';
if (window.navigator.userAgent.indexOf("MSIE") >= 1) {
realpath = document.selection.createRange().text;
}else{
alert("此上传控件暂时只支持IE浏览器!");
return;
}
$(this).attr("disabled",true); 
if(realpath.indexOf("C:\fakepath")> -1){
alert("系统未能获取正确的文件路径,请根据提示修改浏览器安全级别!");
return;
}
//下面的无关紧要了,是我自己的处理
var file = realpath;

var filetype = file.substring(file.lastIndexOf('.')+1, file.length);
if(filetype != 'xls' && filetype != 'xlsx' ){
alert('请选择Excel文件:(.xls或.xlsx)');
return;
}
$("#box1").mask("正在保存中...",null,true);

$.ajax({
type : 'POST',
url : '<%=path%>/',
data : { "file":file
  },
success : function(result){
top.Dialog.alert(result.message,function(){
top.document.getElementById("_DialogFrame_firstDialog").contentWindow.toReload();
$("#box1").unmask();
//关闭窗口
top.Dialog.close();


           });
},
error : function(a){
top.Dialog.alert("访问服务器端出错!");
},
dataType : 'json'
});
 return false;
});
});




  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值