我想从html input type="file"
读取文件路径
(用户在文件对话框中选择的条目)
<script>
function OpenFileDialog(form) {
var a = document.getElementById("inputfile").click();
SampleForm.filePath.value = //set the path here
document.SampleForm.submit();
}
</script>
<form name="SampleForm" action="TestServlet" method="get">
<input type="file" style="display:none;" id="inputfile"/>
<a href="javascript:OpenFileDialog(this.form);">Open here</a>
<input type="hidden" name="filePath" value=""/>
</form>
我希望在我的Servlet类中读取所选文件的路径
我如何获取文件路径?我可以从var a
阅读吗?
或者有没有办法直接从我的servlet input type="file"
访问文件路径?
答案 0 :(得分:9)
首先,要清除常见的误解:服务器端的文件路径毫无价值。想象一下,我是客户端,我给你文件路径c:/passwords.txt
,你将如何得到它的内容服务器?使用java.io.File
?没有?只有当客户端和服务器都在物理上相同的机器上运行时,这才有效。 仅可能发生的是本地开发环境。
其次,澄清限制:由于安全限制,Javascript无法对input type="file"
元素执行任何操作。如果可能,那么可以开发一个网站,将上传的文件设置为c:/passwords.txt
并在onload
期间提交表单。从访问该网站的每个人那里收集所有密码文件都很容易!否?
毕竟,你对文件内容很感兴趣。如HTML forms spec中所述,您需要将请求方法设置为POST
,并将请求编码设置为父multipart/form-data
元素中的<form>
。
<form action="upload" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit">
</form>
这样,文件将在请求正文中发送。由于最高2.5的标准Servlet API版本没有内置工具来解析mulipart/form-data
请求,因此您需要自己解析请求。最好的方法是使用Apache Commons FileUpload。请点击链接,阅读用户指南和常见问题解答,了解代码示例和提示及技巧。如果您已经使用Servlet 3.0,那么您可以使用为此提供的Servlet API HttpServletRequest#getParts()
。 You can find here an article with code examples about that
答案 1 :(得分:0)
(取自http://www.jguru.com/faq/view.jsp?EID=1045507)
解决方案A:
解决方案B:
解决方案C: