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