又一次遇到 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;
});
});
今天的文章fakepath解决方法_fakepath路径解决[通俗易懂]分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/69944.html