因为浏览器提升了安全级别,默认是不会获取文件的真实路径的,都是用fakepath代替了。
1.可以通过修改浏览器的安全级别,步骤是:工具 -> Internet选项 -> 安全 -> 自定义级别 -> 找到“其他”中的“将本地文件上载至服务器时包含本地目录路径”,选中“启用”即可。
2.以上方法对程序员来说肯定不可取,总不能让每一个用户都修改浏览器配置,网上有一种用js代码修改的方法,但只兼容IE、firefox系列。
function getPath(){
var Pathobj = document.getElementById("......");
if(Pathobj){
if (window.navigator.userAgent.indexOf("MSIE")>=1) {
Pathobj.select();
return document.selection.createRange().text;
}else if(window.navigator.userAgent.indexOf("Firefox")>=1){
if(Pathobj.files){
return Pathobj.files.item(0).getAsDataURL();
}
return Pathobj.value;
}
return Pathobj.value;
}
}
我的思路是:
在页面增加一个隐藏标签,然后js把url传递给隐藏标签,最后Ajax更改data.field.file
的值,再post过去。
//用于接收正确url的值
data.field.file = document.getElementById("img_url").value;
完整代码:
// 上传图片处理
var uploadInst = upload.render({
elem: '#upload_img' //绑定元素
,url: ".." //上传接口
,size:50
,accept: 'images' //指定允许上传时校验的文件类型
,acceptMime: 'image/*'//筛选出的文件类型
,before: function(obj){ //选择文件后回调
obj.preview(function(index, file, result){
$('#pre_img').attr('src', result); //图片链接(base64),插入用于预览
});
}
,done: function(res){
//上传完毕回调
if(res.code >0){
return layer.msg('图片上传失败')
}
document.getElementById("img_url").value = res.msg;
}
,error: function(){
//请求异常回调
layer.closeAll('loading'); //关闭loading
}
});
//监听提交
form.on('submit(add)', function(data){
data.field.file = document.getElementById("img_url").value;
//发异步,把数据提交给php
$.ajax({
url:'./goods_add_function.php',
data:data.field,
dataType:'text',
type:'post',
success:function (data) {
layer.alert("增加成功", {icon: 6},function () {
// 获得frame索引
var index = parent.layer.getFrameIndex(window.name);
//关闭当前frame
parent.layer.close(index);
});
}
})
return false;
});