All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.rt.web.multipart.GMultipartResolver Maven / Gradle / Ivy

There is a newer version: 1.1.17
Show newest version
package com.rt.web.multipart;

import org.apache.commons.fileupload.*;
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.MultipartResolver;
import org.springframework.web.multipart.support.DefaultMultipartHttpServletRequest;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * 

This src is modified from Spring 3.0 CommonsMultipartResolver.java and renamed to GMultipartResolver * to make it work in GAE. * *

Servlet-based {@link org.springframework.web.multipart.MultipartResolver} implementation for Jakarta Commons FileUpload 1.2 or above. * *

* Provides "maxUploadSize" and "defaultEncoding" settings as bean properties * (inherited from {@link GFileUploadSupport}). * * See corresponding ServletFileUpload / GFileItemFactory properties ("sizeMax", "sizeThreshold", "headerEncoding") for details in * terms of defaults and accepted values. *

* * @author kernel164 */ public class GMultipartResolver extends GFileUploadSupport implements MultipartResolver { private boolean resolveLazily = false; /** * Set whether to resolve the multipart request lazily at the time of file or parameter access. *

* Default is "false", resolving the multipart elements immediately, throwing corresponding * exceptions at the time of the {@link #resolveMultipart} call. Switch this to "true" for lazy * multipart parsing, throwing parse exceptions once the application attempts to obtain * multipart files or parameters. * * @param resolveLazily resolveLazily */ public void setResolveLazily(boolean resolveLazily) { this.resolveLazily = resolveLazily; } /** * Initialize the underlying * org.apache.commons.fileupload.servlet.ServletFileUpload instance. Can be * overridden to use a custom subclass, e.g. for testing purposes. * * @param fileItemFactory the Commons FileItemFactory to use * @return the new ServletFileUpload instance */ @Override protected FileUpload newFileUpload(FileItemFactory fileItemFactory) { return new ServletFileUpload(fileItemFactory); } /** * Returns true if the request has multipart. */ public boolean isMultipart(HttpServletRequest request) { return (request != null && ServletFileUpload.isMultipartContent(request)); } /** * Resolves multipart request. */ public MultipartHttpServletRequest resolveMultipart(final HttpServletRequest request) throws MultipartException { if (this.resolveLazily) { return new DefaultMultipartHttpServletRequest(request) { @Override protected void initializeMultipart() { MultipartParsingResult parsingResult = parseRequest(request); setMultipartFiles(parsingResult.getMultipartFiles()); setMultipartParameters(parsingResult.getMultipartParameters()); } }; } else { MultipartParsingResult parsingResult = parseRequest(request); return new DefaultMultipartHttpServletRequest(request, parsingResult.getMultipartFiles(), parsingResult.getMultipartParameters(), parsingResult.getMultipartParameterContentTypes()); } } /** * Parse the given servlet request, resolving its multipart elements. * * @param request the request to parse * @return the parsing result * @throws MultipartException if multipart resolution failed. */ @SuppressWarnings("unchecked") protected MultipartParsingResult parseRequest(HttpServletRequest request) throws MultipartException { String encoding = determineEncoding(request); FileUpload fileUpload = prepareFileUpload(encoding); try { List fileItems = ((ServletFileUpload) fileUpload).parseRequest(request); return parseFileItems(fileItems, encoding); } catch (FileUploadBase.SizeLimitExceededException ex) { throw new MaxUploadSizeExceededException(fileUpload.getSizeMax(), ex); } catch (FileUploadException ex) { throw new MultipartException("Could not parse multipart servlet request", ex); } } /** * Determine the encoding for the given request. Can be overridden in subclasses. *

* The default implementation checks the request encoding, falling back to the default encoding * specified for this resolver. * * @param request current HTTP request * @return the encoding for the request (never null) * @see javax.servlet.ServletRequest#getCharacterEncoding * @see #setDefaultEncoding */ protected String determineEncoding(HttpServletRequest request) { String encoding = request.getCharacterEncoding(); if (encoding == null) { encoding = getDefaultEncoding(); } return encoding; } /** * Clean up multi part. */ public void cleanupMultipart(MultipartHttpServletRequest request) { if (request != null) { try { cleanupFileItems(request.getFileMap().values()); } catch (Throwable ex) { logger.warn("Failed to perform multipart cleanup for servlet request", ex); } } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy