- 准备两个Jar包
分别是fileupload 和io (这里我使用commons-fileupload-1.2.1.jar 和
commons-io-1.4.jar )
- 表单设置
method="post" enctype="multipart/form-data"
处理请求的Servlet配置
- 类继承 HttpServlet( extends HttpServlet)
-
创建servletFileUpload( new ServletFileUpload) 该对象需要传递一个接口类型的fileItemFactory, 我们使用fileItemFactory的实现类 diskFileItemFactory(new DiskFileItemFactory)
- 接着设置上传文件的约束
setFileSizeMax()、setSizeMax()、setHeaderEncoding()(都是servletFileUpload的属性)
- 判断是否为文件上传表单,首先解析所有的请求 parseRequest(req),遍历过滤普通表单项isFormField()
- c.getName()获取文件上传的名称,为防止重名可以加上时间戳或者使用 UID.randomUUID()生成唯一识别码 拼接文件名。
- 最后执行c.write()方法,需要File类型的参数(new File("d://a.jpg))
public class UploadServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //DiskFileItemFactory 为FileItemFactory接口的实现类 DiskFileItemFactory fileItemFactory = new DiskFileItemFactory(); // ServletFileUpload 需要FileItemFactory ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory); //文件的总大小 servletFileUpload.setFileSizeMax(30*1024*1024); //三个文件的大小 servletFileUpload.setSizeMax(9*1024*1024); //设置文件名字的编码格式 servletFileUpload.setHeaderEncoding("UTF-8"); try { //解析服务器请求, 返回的是 list类型的FileItem List<FileItem> list = servletFileUpload.parseRequest(req); list.forEach(c->{ //判断是否为正常的表单属性 if(c.isFormField()){ //处理普通表单属性 //获取普通表单的值 String string = c.getString(); }else{ //处理文件上传 //获取文件上传的类型 String contentType = c.getContentType(); //文件的fileName String name = c.getName();// String s = UUID.randomUUID().toString(); name = s+"#"+name; //Tomcat部署的根目录 String realPath = this.getServletContext().getRealPath("/uplaod"); File file = new File(realPath); if(!file.exists()){ file.mkdir(); } try { c.write(new File(file,name)); } catch (Exception e) { e.printStackTrace(); } } }); } catch (FileUploadException e) { e.printStackTrace(); } } }