问题描述
上传文件时,我想获取客户端上传文件的原始路径。第一考虑,当然是使用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; } } 但这样的代码在Ie下还是可行的,但在火狐下不兼容。所以又想通过servlet的第三方工具去做,例如FileUpload,本以为FileItem下的getName()方法能够得到全路径名,但结果仍然只得到文件名,很是杯具!求解决方法!? 问题补充:zhanjia 写道
解决方案
引用我用来做数据接口的,我仅仅是把路径传给另一个系统,然后那个系统就可以从这个路径取文件了。如果先上传一次,再给对方,这样不但影响上传速度,而且会产生大量的垃圾文件。 那你应该将上传后文件在服务器的位置发给另一个系统假如在你本机上传文件D:/file.txt,然后把D:/file.txt发给另一个系统,那是没意义的
解决方案二:
引用上传文件时,我想获取客户端上传文件的原始路径真有必要这个需求?一般都是上传以后在数据库中保存上传后的文件路径,本地路径一般没意义除非像上面所说的文件上传预览,还有那么点用处
解决方案三:
firefox在访问的时候会有安全提示ie中浏览器--internt选项--安全---internet----自定义设置----- 里面 将文件上传到服务器时包含本地目录路径 选择 启用,则上传的包含有路径,如果禁用,就不包含路径
解决方案四:
网上的一些解决方案:<html><head> <title>JS获取上传文件的绝对路径,兼容IE和FF</title> <script type="text/javascript">function readFile(fileBrowser) { if (navigator.userAgent.indexOf("MSIE")!=-1) readFileIE(fileBrowser); else if (navigator.userAgent.indexOf("Firefox")!=-1 || navigator.userAgent.indexOf("Mozilla")!=-1) readFileFirefox(fileBrowser); else alert("Not IE or Firefox (userAgent=" + navigator.userAgent + ")");}function readFileFirefox(fileBrowser) { try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); } catch (e) { alert('路径错误!'); return; } var fileName=fileBrowser.value; var file = Components.classes["@mozilla.org/file/local;1"] .createInstance(Components.interfaces.nsILocalFile); try { file.initWithPath( fileName.replace(///g, "\\") ); } catch(e) { if (e.result!=Components.results.NS_ERROR_FILE_UNRECOGNIZED_PATH) throw e; return; } if ( file.exists() == false ) { alert("File '" + fileName + "' not found."); return; } alert(file.path);}function readFileIE(fileBrowser) { alert(document.getElementById("fileBrowser").value);} </script></head><body> <form name="form1"> <input type="file" name="fileBrowser" size="50" onchange="readFile(this)" /> </form></body></html>预览图片:<html><head><title>get file input full path</title><script language='javascript'>function getFullPath(obj) {if (obj) {var image = new Image();// ieif (window.navigator.userAgent.indexOf("MSIE") >= 1) {obj.select();image.src = document.selection.createRange().text;return document.selection.createRange().text;}// firefoxelse if (window.navigator.userAgent.indexOf("Firefox") >= 1) {if (obj.files) {image.src = obj.files.item(0).getAsDataURL();return obj.files.item(0).getAsDataURL();}return obj.value;}return obj.value;}}</script></head><body><input type="file" onchange="document.getElementById('img').src=getFullPath(this);" /><img id="img" /></body>都是不完全解决方案
解决方案五:
高版本的浏览器出于安全考虑,不允许JS访问上传文件的路径,只能取得文件名
解决方案六:
上传文件一般用input标签,type为file,浏览选择文件后就是文件在本地的绝对路径了引用<input type="file" name="file" />至于你说的,不明白你的意思
解决方案七:
没有办法了 在ie6应该可以 版本高了也都不行了 为了对用户隐私的包含这些信息都不会显示了