文件的上传主要分成两个步骤:

 1.用户在页面中选择要上传的文件,然后将请求提交到Servlet

 2.Servlet收到请求,解析用户上传的文件,然后将文件存储到服务器

 

 以下内容需要注意

 

1. 表单的method属性必须为post

 

2. 表单enctype属性必须为multipart/form-data

 

3.上传文件的控件是intput,type属性为file

编写Servelet

 

页面的表单控件创建好以后,选中文件点击上传按钮请求将会提交到指定的Servlet来处理

注意:这里不能再以前的Servlet中那样,通过request.getParamter()获取请求参数了,当enctype="multipart/form-data" 时,再使用getParamter()获取到内容永远为空因为浏览器发送请求的方式已经改变

 

既然以前的方法不能使用了,这里我们必须要引入一个新的工具来解析请求中的参数和文件,这个工具就是commons-fileupload。

下面是我写的一个上传图片到\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\json\upload文件的servlet代码

public class AServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        DiskFileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload fileUpload =new ServletFileUpload(factory);
        fileUpload.setFileSizeMax(1024*100);
        ServletContext servletContext= request.getServletContext();
        String realPath =servletContext.getRealPath("/upload");
        File file =new File(realPath);
        if(file.exists()){
            file.mkdir();
        }
        try {
            List<FileItem> fileList = fileUpload.parseRequest(request);
            for(FileItem item:fileList){
                if(item.isFormField()){
                    String name =item.getFieldName();
                    String value =item.getString("utf8");
                    System.out.println(name+value);
                }
                else {
                    long size =item.getSize();
                    String name = item.getName();
                    System.out.println(size);
                    try {
                        item.write(new File(realPath+"\\"+name));
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        } catch (FileUploadException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

限制单个文件大小:

限制总文件的大小:

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="${pageContext.request.contextPath}/AServlet" method="post" enctype="multipart/form-data" >
        用户:<input type="text" name="username"/><br>
        <input type="file" name="photo"/><br>
        <input type="file" name="photo1"/><br>
        <input type="file" name="photo2"/><br>
        <input type="submit" value="提交" />
    </form>
</body>
</html>

需要注意的是: