Servlet3.0以前
在Servlet3.0之前,传统的文件上传都需要借助于common-fileupload,处理起来相对比较复杂。
Servlet3.0之后
在Servlet3.0之后,Servlet3.0API为我们提供了一种更简单的文件上传。
在Servlet3.0中,HttpServletRequest增加 了对文件上传的支持,在HttpServletRequest中提供如下方式来实现文件上传:
首先,通过Part getPart(String name)来获取文件上传域,参数name则是表单中<input type="file">文件域的名字name,同样,还可以通过Collection<Part> getParts()方法来获取所有的文件上传域。
现在,来看看Part这个类中方法:
part.getContentType:通过这个方法我们获取到上传的文件的类型
part.getSize():通过这个方法获取上传的文件的大小
part.getHeaderNames():通过这个方法获取该文件上传域的HeaderName
part.getHeader(String headerName):通过这个方法获取该文件上传域headerName对应的value值
part.write(String path):通过这个方法将文件上传域的文件上传到服务器中path路径下
下面通过一个简单的demo来实例说明:
新建一个index.jsp页面:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form action="upload" method="post" enctype="multipart/form-data"> <input type="file" id="file" name="file"/> <input type="submit" value="上传"/> </form> </body> </html>接下来编写一个UploadServlet,这里我通过注解的方式注册Servlet,需要注意的是,对于处理文件上传的Servlet应该使用@MultipartConfig注解来修饰
@WebServlet(urlPatterns="/upload",name="upload") @MultipartConfig public class UploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out=response.getWriter(); request.setCharacterEncoding("UTF-8"); Part part=request.getPart("file"); out.println(part.getContentType()+" "+part.getSize()); String fileNameInfo=part.getHeader("content-disposition"); String fileName=fileNameInfo.substring(fileNameInfo.indexOf("filename=\""),fileNameInfo.length()-1); out.println(fileName); String filename2=fileName.substring(fileName.lastIndexOf("\\"), fileName.length()); part.write(getServletContext().getRealPath("/uploadFiles") +"/"+filename2); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }servlet中的substring是为了获取到本地上传的文件的文件名,在web项目的根路径下新建一个uploadFiles文件夹,用以存放上上传的文件。使用write方法想服务器中传入文件。