Servlet 3.0 上传文件

创建一个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>
<script type="text/javascript">
</script>
</head>
<body>
    <form action="FileUploadServlet" method="post" enctype="multipart/form-data">
        <input type="file" id='fileUpload' name="fileUpload"/>
        <input type="submit" value="上传文件"/>
    </form>
</body>
</html>

创建一个servlet处理:

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Collection;

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 implementation class FileUploadServlet
 */
@MultipartConfig
@WebServlet("/FileUploadServlet")
public class FileUploadServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public FileUploadServlet() {
        super();
    }

    @SuppressWarnings("unused")
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取上传文件列表集合
        Collection<Part> parts = request.getParts();

        for(Part p : parts){
            String name = p.getName();//name是获取的前台input type=file的name值。
            long size = p.getSize();//size是文件大小。

            Collection<String> headerNames = p.getHeaderNames();
            /**
             * Content-Disposition:form-data; name="fileUpload"; filename="60-130121114121.jpg"
             *  Content-Type:image/jpeg
             */
            String cd = p.getHeader("Content-Disposition"); 
            String cds[] = cd.split(";");
            if(cds == null || cds.length < 3)
                throw new IllegalArgumentException();
            String fileNameStr = cds[2];
            String[] files = fileNameStr.split("=");
            String fileName = files[1];
            InputStream in = p.getInputStream();
            if(fileName != null)
                fileName = fileName.substring(1, fileName.length()-1);
            dealFile(in, fileName.trim());

        }
        response.setCharacterEncoding("gbk");
        response.getWriter().append("上传成功!");

    }

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

    private void dealFile(InputStream in, String fileName){
        OutputStream out = null;
        try{
            byte[] b = new byte[1024];
            //此处path仅做示例,需要自己改写。
            String path = "d:\test\"+fileName;
            out = new FileOutputStream(new File(path));

            int len = 0;
            while((len = in.read(b)) != -1){
                out.write(b, 0, len);
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            try {
                if(in != null)
                    in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if(out != null)
                    out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}

@MultipartConfig:需要加上这个注解,否则上传无效。

关于servlet3.0注解新特性参考文章:https://www.ibm.com/developerworks/cn/java/j-lo-servlet30/

原文地址:https://www.cnblogs.com/Kevin-1992/p/12608398.html