package framework.fileUpload; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItemFactory; import org.apache.commons.fileupload.FileUpload; import org.apache.commons.fileupload.FileUploadBase; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.springframework.web.multipart.MaxUploadSizeExceededException; import org.springframework.web.multipart.MultipartException; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.multipart.commons.CommonsMultipartResolver; /** * 文件上传 * * @author liuyajun, 8384503@qq.com * @date 2016年1月19日 * @time 下午4:34:06 */ public class MyMultipartResolver extends CommonsMultipartResolver { private HttpServletRequest request; protected FileUpload newFileUpload(FileItemFactory fileItemFactory) { ServletFileUpload upload = new ServletFileUpload(fileItemFactory); upload.setSizeMax(-1); if (request != null) { HttpSession session = request.getSession(); FileUploadProgressListener progressListener = new FileUploadProgressListener(session); upload.setProgressListener(progressListener); } return upload; } public MultipartHttpServletRequest resolveMultipart( HttpServletRequest request) throws MultipartException { // 获取到request,要用到session this.request = request; return super.resolveMultipart(request); } @Override public MultipartParsingResult parseRequest( HttpServletRequest request) throws MultipartException { HttpSession session = request.getSession(); String encoding = determineEncoding(request); FileUpload fileUpload = prepareFileUpload(encoding); FileUploadProgressListener progressListener = new FileUploadProgressListener(session); fileUpload.setProgressListener(progressListener); try { List fileItems = ((ServletFileUpload) fileUpload).parseRequest(request); return parseFileItems(fileItems, encoding); } catch (FileUploadBase.SizeLimitExceededException ex) { progressListener.tooMax(fileUpload.getSizeMax()); throw new MaxUploadSizeExceededException(fileUpload.getSizeMax(), ex); } catch (FileUploadException ex) { throw new MultipartException("Could not parse multipart servlet request", ex); } } }