这个问题遇到过几次,大多数情况下都是用最偷懒的办法,告诉用户设置一下浏览器就OK了:
Internet选项 -> 安全 -> 自定义级别 -> 将本地文件上载至服务器时包含本地目录路径 -> 选“启动” -> 确定
“但是,作为开发者,我们不能指望客户去这么做,所以我们必须通过代码解决这个问题。”
由于公司有自己的开发平台,页面上使用的上传控件不是简单的input(type=file),而是开发平台封装的js控件,要想修改这个问题还真费了点时间,先找到封装这个控件的js文件,发现里面一堆定义如a、b、c、_uploadfile_的变量,没时间把整个文件看懂,只好用猜测并加debugger调试的办法来找处理文件全路径的代码,最后依葫芦画瓢,用下面的解决办法来处理:
针对IE浏览器,搜素到的解决办法如下:
例如上传文件控件的HTML代码是:
<input id="file_upl" type="file" />
那么在JS代码中我就可以这样来获取真实的文件路径:
var file_upl = document.getElementById('file_upl');
file_upl.select();var realpath = document.selection.createRange().text;
如果我们用的是Ext,那么我们会使用Ext.ux.form.FileField组件,假设我们赋给它的id是"file_upl",这时同样会产生上面的问题,解决的办法也是一样,但是我们获取到type为file的input才行,而根据"file_upl"获取到的元素根本不是我们所需要的,Ext是自动生成了一个type为file的input,你可以通过DebugBar或其他类似工具看到这个input,它的id是赋给Ext.ux.form.FileField的id加上"-file"的后缀,也就是"file_upl-file",所以获取真实文件路径的JS代码就是:
var file_upl = document.getElementById('file_upl-file');
file_upl.select();var realpath = document.selection.createRange().text;