如何获取文件名

时间:2010-04-07 12:34:03

标签: javascript html 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>

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

2 个答案:

答案 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:

  1. 下载http://www.servlets.com/cos/index.html
  2. 检查http://www.servlets.com/cos/javadoc/com/oreilly/servlet/MultipartRequest.html - 它有相关的吸气剂。
  3. 解决方案B:

    1. 下载http://commons.apache.org/fileupload/
    2. 调用readHeaders() org.apache.commons.fileupload.MultipartStream
    3. 解决方案C:

      1. 下载http://users.boone.net/wbrameld/multipartformdata/
      2. 启用getParameter com.bigfoot.bugar.servlet.http.MultipartFormData