如何在jsp中获取<input type ="file"的文件名

dee*_*121 3 html javascript jsp servlets file-upload

我想从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>
Run Code Online (Sandbox Code Playgroud)

我希望在我的Servlet类中读取所选文件的路径如何获取文件路径?我能从中读出来var a吗?或者有没有办法input type="file"从我的servlet 直接访问文件路径?

Bal*_*usC 9

首先,要清除一个常见的误解:文件路径在服务器端是没有价值的.想象一下,我是客户端,我给你文件路径c:/passwords.txt,你将如何获得它的内容服务器?用java.io.File?没有?只有当客户端和服务器都在物理上相同的机器上运行时,这才有效.该可能发生难度当地的发展环境.

第二,澄清限制:input type="file"由于安全限制,Javascript无法对元素执行任何操作.如果可能,那么可以开发一个网站,将上传的文件设置为c:/passwords.txt并在此期间提交表单onload.从访问该网站的每个人那里收集所有密码文件都很容易!没有?

毕竟,你对文件内容很感兴趣.如HTML表单规范中所述,您需要在父元素中设置请求方法POST和请求编码.multipart/form-data<form>

<form action="upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit">
</form>
Run Code Online (Sandbox Code Playgroud)

这样,文件将在请求正文中发送.由于最高2.5的标准Servlet API版本没有内置工具来解析mulipart/form-data请求,因此您需要自己解析请求.最好的方法是使用Apache Commons FileUpload.请点击链接,阅读用户指南常见问题解答,了解代码示例和提示与技巧.如果您已经在Servlet 3.0上,那么您可以使用HttpServletRequest#getParts()为此提供的Servlet API .你可以在这里找到一篇包含代码示例的文章.