commons-fileupload

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>

你可能感兴趣的:(java,apache,jsp,servlet,sun)