Package org.apache.struts2.dispatcher.multipart

# Class MultiPartRequestWrapper

java.lang.Object
jakarta.servlet.ServletRequestWrapper
jakarta.servlet.http.HttpServletRequestWrapper
org.apache.struts2.dispatcher.StrutsRequestWrapper
org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper

All Implemented Interfaces:
  `jakarta.servlet.http.HttpServletRequest`, `jakarta.servlet.ServletRequest`

public class MultiPartRequestWrapper extends StrutsRequestWrapper

Parse a multipart request and provide a wrapper around the request. The parsing implementation used depends on the `struts.multipart.parser` setting. It should be set to a class which extends `MultiPartRequest`.

The `struts.multipart.parser` property should be set to `jakarta` for the Jakarta implementation, and `cos` for the Jason Hunter implementation.

The files are uploaded when the object is instantiated. If there are any errors they are logged using `addError(LocalizedMessage)`. An action handling a multipart form should first check `hasErrors()` before doing any other processing.

An alternate implementation, PellMultiPartRequest, is provided as a plugin.

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected static final org.apache.logging.log4j.Logger`
  `LOG`

  ### Fields inherited from interface jakarta.servlet.http.HttpServletRequest

  `BASIC_AUTH, CLIENT_CERT_AUTH, DIGEST_AUTH, FORM_AUTH`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `MultiPartRequestWrapper(MultiPartRequest multiPartRequest, jakarta.servlet.http.HttpServletRequest request, String saveDir, LocaleProvider provider)`
  `MultiPartRequestWrapper(MultiPartRequest multiPartRequest, jakarta.servlet.http.HttpServletRequest request, String saveDir, LocaleProvider provider, boolean disableRequestAttributeValueStackLookup)`
  Process file downloads and log any errors.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `protected void`
  `addError(LocalizedMessage anErrorMessage)`
  Adds an error message when it isn't already added.
  `protected LocalizedMessage`
  `buildErrorMessage(Throwable e, Object[] args)`
  `void`
  `cleanUp()`
  `String[]`
  `getContentTypes(String name)`
  Get an array of content encoding for the specified input field name or `null` if no content type was specified.
  `Collection<LocalizedMessage>`
  `getErrors()`
  Returns a collection of any errors generated when parsing the multipart request.
  `String[]`
  `getFileNames(String fieldName)`
  Get a String array of the file names for uploaded files
  `Enumeration<String>`
  `getFileParameterNames()`
  Get an enumeration of the parameter names for uploaded files
  `UploadedFile[]`
  `getFiles(String fieldName)`
  Get a `File` for the given input field name.
  `String[]`
  `getFileSystemNames(String fieldName)`
  Get the filename(s) of the file(s) uploaded for the given input field name.
  `String`
  `getParameter(String name)`
  `Map<String,String[]>`
  `getParameterMap()`
  `Enumeration<String>`
  `getParameterNames()`
  `String[]`
  `getParameterValues(String name)`
  `boolean`
  `hasErrors()`
  Returns `true` if any errors occured when parsing the HTTP multipart request, `false` otherwise.
  `protected Enumeration<String>`
  `mergeParams(Enumeration<String> params1, Enumeration<String> params2)`
  Merges 2 enumeration of parameters as one.
  `protected void`
  `setLocale(jakarta.servlet.http.HttpServletRequest request)`

  ### Methods inherited from class org.apache.struts2.dispatcher.StrutsRequestWrapper

  `getAttribute`

  ### Methods inherited from class jakarta.servlet.http.HttpServletRequestWrapper

  `authenticate, changeSessionId, getAuthType, getContextPath, getCookies, getDateHeader, getHeader, getHeaderNames, getHeaders, getHttpServletMapping, getIntHeader, getMethod, getPart, getParts, getPathInfo, getPathTranslated, getQueryString, getRemoteUser, getRequestedSessionId, getRequestURI, getRequestURL, getServletPath, getSession, getSession, getTrailerFields, getUserPrincipal, isRequestedSessionIdFromCookie, isRequestedSessionIdFromURL, isRequestedSessionIdValid, isTrailerFieldsReady, isUserInRole, login, logout, newPushBuilder, upgrade`

  ### Methods inherited from class jakarta.servlet.ServletRequestWrapper

  `getAsyncContext, getAttributeNames, getCharacterEncoding, getContentLength, getContentLengthLong, getContentType, getDispatcherType, getInputStream, getLocalAddr, getLocale, getLocales, getLocalName, getLocalPort, getProtocol, getProtocolRequestId, getReader, getRemoteAddr, getRemoteHost, getRemotePort, getRequest, getRequestDispatcher, getRequestId, getScheme, getServerName, getServerPort, getServletConnection, getServletContext, isAsyncStarted, isAsyncSupported, isSecure, isWrapperFor, isWrapperFor, removeAttribute, setAttribute, setCharacterEncoding, setRequest, startAsync, startAsync`

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

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

  ### Methods inherited from interface jakarta.servlet.ServletRequest

  `getAsyncContext, getAttributeNames, getCharacterEncoding, getContentLength, getContentLengthLong, getContentType, getDispatcherType, getInputStream, getLocalAddr, getLocale, getLocales, getLocalName, getLocalPort, getProtocol, getProtocolRequestId, getReader, getRemoteAddr, getRemoteHost, getRemotePort, getRequestDispatcher, getRequestId, getScheme, getServerName, getServerPort, getServletConnection, getServletContext, isAsyncStarted, isAsyncSupported, isSecure, removeAttribute, setAttribute, setCharacterEncoding, startAsync, startAsync`

- ## Field Details

  - ### LOG

    protected static final org.apache.logging.log4j.Logger LOG

- ## Constructor Details

  - ### MultiPartRequestWrapper

    public MultiPartRequestWrapper(MultiPartRequest multiPartRequest, jakarta.servlet.http.HttpServletRequest request, String saveDir, LocaleProvider provider, boolean disableRequestAttributeValueStackLookup)
    Process file downloads and log any errors.
    Parameters:
      `multiPartRequest` - Our MultiPartRequest object
      `request` - Our HttpServletRequest object
      `saveDir` - Target directory for any files that we save
      `provider` - locale provider
      `disableRequestAttributeValueStackLookup` - disable the request attribute value stack lookup

  - ### MultiPartRequestWrapper

    public MultiPartRequestWrapper(MultiPartRequest multiPartRequest, jakarta.servlet.http.HttpServletRequest request, String saveDir, LocaleProvider provider)

- ## Method Details

  - ### setLocale

    protected void setLocale(jakarta.servlet.http.HttpServletRequest request)

  - ### buildErrorMessage

    protected LocalizedMessage buildErrorMessage(Throwable e, Object[] args)

  - ### getFileParameterNames

    public Enumeration<String> getFileParameterNames()
    Get an enumeration of the parameter names for uploaded files
    Returns:
      enumeration of parameter names for uploaded files

  - ### getContentTypes

    public String[] getContentTypes(String name)
    Get an array of content encoding for the specified input field name or `null` if no content type was specified.
    Parameters:
      `name` - input field name
    Returns:
      an array of content encoding for the specified input field name

  - ### getFiles

    public UploadedFile[] getFiles(String fieldName)
    Get a `File` for the given input field name.
    Parameters:
      `fieldName` - input field name
    Returns:
      a File[] object for files associated with the specified input field name

  - ### getFileNames

    public String[] getFileNames(String fieldName)
    Get a String array of the file names for uploaded files
    Parameters:
      `fieldName` - Field to check for file names.
    Returns:
      a String[] of file names for uploaded files

  - ### getFileSystemNames

    public String[] getFileSystemNames(String fieldName)
    Get the filename(s) of the file(s) uploaded for the given input field name. Returns `null` if the file is not found.
    Parameters:
      `fieldName` - input field name
    Returns:
      the filename(s) of the file(s) uploaded for the given input field name or `null` if name not found.

  - ### getParameter

    public String getParameter(String name)
    Specified by:
      `getParameter` in interface `jakarta.servlet.ServletRequest`
    Overrides:
      `getParameter` in class `jakarta.servlet.ServletRequestWrapper`
    See Also:
      - `ServletRequest.getParameter(String)`

  - ### getParameterMap

    public Map<String,String[]> getParameterMap()
    Specified by:
      `getParameterMap` in interface `jakarta.servlet.ServletRequest`
    Overrides:
      `getParameterMap` in class `jakarta.servlet.ServletRequestWrapper`
    See Also:
      - `ServletRequest.getParameterMap()`

  - ### getParameterNames

    public Enumeration<String> getParameterNames()
    Specified by:
      `getParameterNames` in interface `jakarta.servlet.ServletRequest`
    Overrides:
      `getParameterNames` in class `jakarta.servlet.ServletRequestWrapper`
    See Also:
      - `ServletRequest.getParameterNames()`

  - ### getParameterValues

    public String[] getParameterValues(String name)
    Specified by:
      `getParameterValues` in interface `jakarta.servlet.ServletRequest`
    Overrides:
      `getParameterValues` in class `jakarta.servlet.ServletRequestWrapper`
    See Also:
      - `ServletRequest.getParameterValues(String)`

  - ### hasErrors

    public boolean hasErrors()
    Returns `true` if any errors occured when parsing the HTTP multipart request, `false` otherwise.
    Returns:
      `true` if any errors occured when parsing the HTTP multipart request, `false` otherwise.

  - ### getErrors

    public Collection<LocalizedMessage> getErrors()
    Returns a collection of any errors generated when parsing the multipart request.
    Returns:
      the error Collection.

  - ### addError

    protected void addError(LocalizedMessage anErrorMessage)
    Adds an error message when it isn't already added.
    Parameters:
      `anErrorMessage` - the error message to report.

  - ### mergeParams

    protected Enumeration<String> mergeParams(Enumeration<String> params1, Enumeration<String> params2)
    Merges 2 enumeration of parameters as one.
    Parameters:
      `params1` - the first enumeration.
      `params2` - the second enumeration.
    Returns:
      a single Enumeration of all elements from both Enumerations.

  - ### cleanUp

    public void cleanUp()