文件的上传主要分成两个步骤:
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>
需要注意的是: