2013-10-08 49 views
0

我有一个Java动态Web项目,而且我正在使用TomCat v7.0。使用Java Servlet上传文件

我是网络项目的新手,我不太了解如何在一个我的jsp页面上传文件。由于我的项目只是本地的,所以我想我可以使用一个多部分的表单,在这个表单中用户可以选择这个文件(这个部分会很好),然后从我的Servlet中检索文件路径。虽然我不能完成这部分,它似乎只给我文件的名称,而不是它的整个路径。

任何人都可以指向正确的方向吗?我已经阅读了几篇关于Apache文件上传的文章,并从多部分表单中获取信息,但似乎没有任何帮助。

如何从窗体获取文件路径或者如何获取上传的文件以在我的Java类中使用?

在此先感谢。

.JSP:

<form method="post" action="upload" enctype="multipart/form-data"> 
<input type="file" name="filePath" accept="application/vnd.ms-excel, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"></input> 
<input type="submit" value="Enviar"></input> 
</form> 

的Java Servlet:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{ 
    PrintWriter out = response.getWriter(); 
    out.println("<html><body>"); 

    try 
    { 
     List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request); 
     for (FileItem item : items) 
     { 
      if (item.isFormField()) 
      { 
       // Process regular form field (input type="text|radio|checkbox|etc", select, etc). 
       String fieldname = item.getFieldName(); 
       String fieldvalue = item.getString(); 

       out.println("<h1>"+fieldname+"/"+fieldvalue+"</h1>"); 
      } 
      else 
      { 
       // Process form file field (input type="file"). 
       String fieldname = item.getFieldName(); 
       String filename = item.getName(); 
       InputStream filecontent = item.getInputStream(); 
       String s = filecontent.toString(); 
       out.println("<h1>"+s+"/"+filename+"</h1>"); 
       item.write(null); 
      } 
     } 
    } 
    catch (FileUploadException e) 
    { 
     throw new ServletException("Cannot parse multipart request.", e); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 

    out.println("</body></html>"); 
} 

回答

1

不提供文件路径是浏览器的安全功能。

您的文件内容在您的代码中可用(InputStream filecontent),因此您可以使用该文件或使用FileItem上的其中一种便捷方法,例如,

item.write(new File("/path/to/myfile.txt")); 
+0

你好,谢谢你的回答!我认为这种方式来获取文件(使用InputStream)确实是可行的。但是,你能向我解释'item.write()'的功能吗? –