我有一个Java动态Web项目,正在使用TomCat v7.0。
我是Web项目的新手,但我不太了解如何在一个jsp页面中上传文件。由于我的项目只打算在本地进行,所以我认为我可以使用多部分形式,使人们可以选择文件(这一部分可以正常工作),然后从我的Servlet中检索文件路径。但是我无法完成这部分,它似乎只给我文件的名称,而不是整个路径。
谁能指出我正确的方向?我已经阅读了几篇有关Apache File Upload和从多部分表单获取信息的帖子,但似乎没有什么帮助我。
如何从表单获取文件路径,或者如何在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>"); }
不提供文件路径是浏览器的安全功能。
您的代码(InputStream filecontent)中有可用的文件内容,因此可以使用它,也可以使用上的一种便捷方法FileItem,例如
InputStream filecontent
FileItem
item.write(new File("/path/to/myfile.txt"));