org.springframework.web.multipart.commons

## Class CommonsMultipartResolver

- java.lang.Object
- - org.springframework.web.multipart.commons.CommonsFileUploadSupport
  - - org.springframework.web.multipart.commons.CommonsMultipartResolver

- All Implemented Interfaces:
    Aware, ServletContextAware, MultipartResolver

      public class CommonsMultipartResolver
      extends CommonsFileUploadSupport
      implements MultipartResolver, ServletContextAware

  Servlet-based `MultipartResolver` implementation for Jakarta Commons FileUpload 1.2 or above.

  Provides "maxUploadSize", "maxInMemorySize" and "defaultEncoding" settings as bean properties (inherited from `CommonsFileUploadSupport`). See corresponding ServletFileUpload / DiskFileItemFactory properties ("sizeMax", "sizeThreshold", "headerEncoding") for details in terms of defaults and accepted values.

  Saves temporary files to the servlet container's temporary directory. Needs to be initialized either by an application context or via the constructor that takes a ServletContext (for standalone usage).

  Since:
    29.09.2003
  Author:
    Trevor D. Cook, Juergen Hoeller
  See Also:
    `CommonsMultipartResolver(ServletContext)`, `setResolveLazily(boolean)`, `CommonsPortletMultipartResolver`, `ServletFileUpload`, `DiskFileItemFactory`

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class org.springframework.web.multipart.commons.CommonsFileUploadSupport

      `CommonsFileUploadSupport.MultipartParsingResult`

  - ### Field Summary

    - ### Fields inherited from class org.springframework.web.multipart.commons.CommonsFileUploadSupport

      `logger`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `CommonsMultipartResolver()` Constructor for use as bean.
    `CommonsMultipartResolver(ServletContext servletContext)` Constructor for standalone usage.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `cleanupMultipart(MultipartHttpServletRequest request)` Cleanup any resources used for the multipart handling, like a storage for the uploaded files.
    `protected String` | `determineEncoding(HttpServletRequest request)` Determine the encoding for the given request.
    `boolean` | `isMultipart(HttpServletRequest request)` Determine if the given request contains multipart content.
    `protected org.apache.commons.fileupload.FileUpload` | `newFileUpload(org.apache.commons.fileupload.FileItemFactory fileItemFactory)` Initialize the underlying `org.apache.commons.fileupload.servlet.ServletFileUpload` instance.
    `protected CommonsFileUploadSupport.MultipartParsingResult` | `parseRequest(HttpServletRequest request)` Parse the given servlet request, resolving its multipart elements.
    `MultipartHttpServletRequest` | `resolveMultipart(HttpServletRequest request)` Parse the given HTTP request into multipart files and parameters, and wrap the request inside a `MultipartHttpServletRequest` object that provides access to file descriptors and makes contained parameters accessible via the standard ServletRequest methods.
    `void` | `setResolveLazily(boolean resolveLazily)` Set whether to resolve the multipart request lazily at the time of file or parameter access.
    `void` | `setServletContext(ServletContext servletContext)` Set the `ServletContext` that this object runs in.

    - ### Methods inherited from class org.springframework.web.multipart.commons.CommonsFileUploadSupport

      `cleanupFileItems, getDefaultEncoding, getFileItemFactory, getFileUpload, isUploadTempDirSpecified, newFileItemFactory, parseFileItems, prepareFileUpload, setDefaultEncoding, setMaxInMemorySize, setMaxUploadSize, setUploadTempDir`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### CommonsMultipartResolver

          public CommonsMultipartResolver()

      Constructor for use as bean. Determines the servlet container's temporary directory via the ServletContext passed in as through the ServletContextAware interface (typically by a WebApplicationContext).
      See Also:
        `setServletContext(javax.servlet.ServletContext)`, `ServletContextAware`, `WebApplicationContext`

    - #### CommonsMultipartResolver

          public CommonsMultipartResolver(ServletContext servletContext)

      Constructor for standalone usage. Determines the servlet container's temporary directory via the given ServletContext.
      Parameters:
        `servletContext` - the ServletContext to use

  - ### Method Detail

    - #### setResolveLazily

          public void setResolveLazily(boolean resolveLazily)

      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 `resolveMultipart(javax.servlet.http.HttpServletRequest)` call. Switch this to "true" for lazy multipart parsing, throwing parse exceptions once the application attempts to obtain multipart files or parameters.

    - #### newFileUpload

          protected org.apache.commons.fileupload.FileUpload newFileUpload(org.apache.commons.fileupload.FileItemFactory fileItemFactory)

      Initialize the underlying `org.apache.commons.fileupload.servlet.ServletFileUpload` instance. Can be overridden to use a custom subclass, e.g. for testing purposes.
      Specified by:
        `newFileUpload` in class `CommonsFileUploadSupport`
      Parameters:
        `fileItemFactory` - the Commons FileItemFactory to use
      Returns:
        the new ServletFileUpload instance

    - #### setServletContext

          public void setServletContext(ServletContext servletContext)

      Description copied from interface: `ServletContextAware`
      Set the `ServletContext` that this object runs in.

      Invoked after population of normal bean properties but before an init callback like InitializingBean's `afterPropertiesSet` or a custom init-method. Invoked after ApplicationContextAware's `setApplicationContext`.

      Specified by:
        `setServletContext` in interface `ServletContextAware`
      Parameters:
        `servletContext` - ServletContext object to be used by this object
      See Also:
        `InitializingBean.afterPropertiesSet()`, `ApplicationContextAware.setApplicationContext(org.springframework.context.ApplicationContext)`

    - #### isMultipart

          public boolean isMultipart(HttpServletRequest request)

      Description copied from interface: `MultipartResolver`
      Determine if the given request contains multipart content.

      Will typically check for content type "multipart/form-data", but the actually accepted requests might depend on the capabilities of the resolver implementation.

      Specified by:
        `isMultipart` in interface `MultipartResolver`
      Parameters:
        `request` - the servlet request to be evaluated
      Returns:
        whether the request contains multipart content

    - #### resolveMultipart

          public MultipartHttpServletRequest resolveMultipart(HttpServletRequest request)
                                                       throws MultipartException

      Description copied from interface: `MultipartResolver`
      Parse the given HTTP request into multipart files and parameters, and wrap the request inside a `MultipartHttpServletRequest` object that provides access to file descriptors and makes contained parameters accessible via the standard ServletRequest methods.
      Specified by:
        `resolveMultipart` in interface `MultipartResolver`
      Parameters:
        `request` - the servlet request to wrap (must be of a multipart content type)
      Returns:
        the wrapped servlet request
      Throws:
        `MultipartException` - if the servlet request is not multipart, or if implementation-specific problems are encountered (such as exceeding file size limits)
      See Also:
        `MultipartRequest.getFile(java.lang.String)`, `MultipartRequest.getFileNames()`, `MultipartRequest.getFileMap()`, `ServletRequest.getParameter(java.lang.String)`, `ServletRequest.getParameterNames()`, `ServletRequest.getParameterMap()`

    - #### parseRequest

          protected CommonsFileUploadSupport.MultipartParsingResult parseRequest(HttpServletRequest request)
                                                                          throws MultipartException

      Parse the given servlet request, resolving its multipart elements.
      Parameters:
        `request` - the request to parse
      Returns:
        the parsing result
      Throws:
        `MultipartException` - if multipart resolution failed.

    - #### determineEncoding

          protected String determineEncoding(HttpServletRequest request)

      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.

      Parameters:
        `request` - current HTTP request
      Returns:
        the encoding for the request (never `null`)
      See Also:
        `ServletRequest.getCharacterEncoding()`, `CommonsFileUploadSupport.setDefaultEncoding(java.lang.String)`

    - #### cleanupMultipart

          public void cleanupMultipart(MultipartHttpServletRequest request)

      Description copied from interface: `MultipartResolver`
      Cleanup any resources used for the multipart handling, like a storage for the uploaded files.
      Specified by:
        `cleanupMultipart` in interface `MultipartResolver`
      Parameters:
        `request` - the request to cleanup resources for