package com.szf.servlet; import java.io.File; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItemFactory; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class UploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; private static final long FILE_MAX_SIZE = 4 * 1024 * 1024; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); if (!ServletFileUpload.isMultipartContent(request)) { forward(request, response, "error form type"); } String fileTempPath = this.getServletContext().getRealPath("/") + "filetemp"; File tempDir = new File(fileTempPath); if (!tempDir.exists()) { tempDir.mkdirs(); } FileItemFactory factory = new DiskFileItemFactory(4096, tempDir); ServletFileUpload sfu = new ServletFileUpload(factory); sfu.setFileSizeMax(FILE_MAX_SIZE); List<FileItem> fileItems = null; try { fileItems = sfu.parseRequest(request); } catch (FileUploadException e) { e.printStackTrace(); if (e instanceof SizeLimitExceededException) { forward(request, response, "invalid file size"); } return; } if (fileItems == null || fileItems.size() == 0) { forward(request, response, "please upload a file"); return; } this.saveFile(request, response, fileItems); } private void forward(HttpServletRequest request, HttpServletResponse response, String message) throws ServletException, IOException { String url = "/index.jsp"; request.setAttribute("message", message); request.getRequestDispatcher(url).forward(request, response); } private void saveFile(HttpServletRequest request, HttpServletResponse response, List<FileItem> fileItems) throws ServletException, IOException { for (FileItem fi : fileItems) { if (fi == null || fi.isFormField()) { continue; } File file = new File("d://"+fi.getName()); try { fi.write(file); } catch (Exception e) { forward(request, response, e.getMessage()); } } } }
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <c:set var="ctx" value="${pageContext.request.contextPath}" scope="page"></c:set> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>upload</title> </head> <body> <c:out value="${message}"></c:out> <form action="${ctx}/servlet/UploadServlet" method="post" enctype="multipart/form-data"> 文件<input type="file" name="file"/><br/> <input type="submit" value="上传"/> </form> </body> </html>