文件的上传主要分成两个步骤:
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 { ListfileList = 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"%>Insert title here
需要注意的是: