servlet3.0新特性之文件上传

Servlet3.0 提供了专门的文件上传 API。 HttpServletRequest 的 getPart()方法可以完成单个文件上传,而 getParts()方法可以完成多个文件上传。注意,这两个方法是从 Servlet3.0 开始定义的。
getPart
方法:Part getPart(String name) throws IOException, ServletException
作用:获取 Multipart 请求中指定名称的”部分”。一般这里的参数是上传表单中的”file”表单项的 name 值。
getParts
方法:java.util.Collection getParts()throws IOException, ServletException
作用:获取 Multipart 请求中的所有”部分”。多文件上传时使用该方法。

Servlet3.0在javax.servlet.http包中新增了Part接口,该接口中常用的方法有:
write
方法:void write(String fileName) throws IOException
作用:将上传文件数据写入到指定的文件中。

另外在Servlet3.1中的Part接口里面新增了getSubmittedFileName方法用来获取上传的文件名

代码示例:

创建servlet时,需要在Servlet中添加一个@MultipartConfig注解,表示当前 Servlet 可以处理 Multipart 请求。

package com.monkey1024.servlet;

import java.io.File;
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

/**
 * 处理上传的servlet
 */
@WebServlet("/upload")
@MultipartConfig //表示当前servlet可以处理multipart请求
public class UploadServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取服务器存放上传文件的路径
        String path = this.getServletContext().getRealPath("/upload");
        System.out.println(path);
        //获取上传文件,photo是html表单中的name
        Part part = request.getPart("photo");
        //获取上传文件的名称,这是servlet3.1中加入的方法
        String fileName = part.getSubmittedFileName();

        //将上传的文件写入到指定的服务器路径中
        part.write(path + "/" + fileName);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

创建一个html文件

<form enctype="multipart/form-data" action="/upload" method="post" >
    <input type="file" name="photo"/><br/>
    <input type="submit" value="上传"/><br/>
</form>