Package org.apache.struts2.interceptor

# Class ActionFileUploadInterceptor

java.lang.Object
org.apache.struts2.interceptor.AbstractInterceptor
org.apache.struts2.interceptor.AbstractFileUploadInterceptor
org.apache.struts2.interceptor.ActionFileUploadInterceptor

All Implemented Interfaces:
  `Serializable`, `ConditionalInterceptor`, `Interceptor`

public class ActionFileUploadInterceptor extends AbstractFileUploadInterceptor

Interceptor that is based off of `MultiPartRequestWrapper`, which is automatically applied for any request that includes a file when the support for multi-part request is enabled, see Disabling file upload.

You can get access to these files by implementing `UploadedFilesAware` interface. The interceptor will then call `UploadedFilesAware.withUploadedFiles(List)` when there are files which were accepted during the upload process.

This interceptor will add several field errors, assuming that the action implements `ValidationAware`. These error messages are based on several i18n values stored in struts-messages.properties, a default i18n file processed for all i18n requests. You can override the text of these messages by providing text for the following keys:

- struts.messages.error.uploading - a general error that occurs when the file could not be uploaded
- struts.messages.error.file.too.large - occurs when the uploaded file is too large
- struts.messages.error.content.type.not.allowed - occurs when the uploaded file does not match the expected content types specified
- struts.messages.error.file.extension.not.allowed - occurs when the uploaded file does not match the expected file extensions specified

Interceptor parameters:

- maximumSize (optional) - the maximum size (in bytes) that the interceptor will allow a file reference to be set on the action. Note, this is not related to the various properties found in struts.properties. Default to approximately 2MB.
- allowedTypes (optional) - a comma separated list of content types (ie: text/html) that the interceptor will allow a file reference to be set on the action. If none is specified allow all types to be uploaded.
- allowedExtensions (optional) - a comma separated list of file extensions (ie: .html) that the interceptor will allow a file reference to be set on the action. If none is specified allow all extensions to be uploaded.

Example code:

     <action name="doUpload" class="com.example.UploadAction">
         <interceptor-ref name="actionFileUpload"/>
         <interceptor-ref name="basicStack"/>
         <result name="success">good_result.jsp</result>
     </action>

You must set the encoding to `multipart/form-data` in the form where the user selects the file to upload.

       <s:form action="doUpload" method="post" enctype="multipart/form-data">
           <s:file name="upload" label="File"/>
           <s:submit/>
       </s:form>

And then in your action code you'll have access to the File object if you provide setters according to the naming convention documented in the start.

      package com.example;

      import java.io.File;
      import org.apache.struts2.ActionSupport;
      import org.apache.struts2.action.UploadedFilesAware;

      public UploadAction extends ActionSupport implements UploadedFilesAware {
        private UploadedFile uploadedFile;
        private String contentType;
        private String fileName;
        private String originalName;

        @Override
        public void withUploadedFiles(List uploadedFiles) {
            if (!uploadedFiles.isEmpty() > 0) {
                this.uploadedFile = uploadedFiles.get(0);
                this.fileName = uploadedFile.getName();
                this.contentType = uploadedFile.getContentType();
                this.originalName = uploadedFile.getOriginalName();
            }
        }

        public String execute() {
           //...
           return SUCCESS;
        }
      }

See Also:
  - Serialized Form

- ## Field Summary

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

  ### Fields inherited from class org.apache.struts2.interceptor.AbstractFileUploadInterceptor

  `STRUTS_MESSAGES_BYPASS_REQUEST_KEY, STRUTS_MESSAGES_ERROR_CONTENT_TYPE_NOT_ALLOWED_KEY, STRUTS_MESSAGES_ERROR_FILE_EXTENSION_NOT_ALLOWED_KEY, STRUTS_MESSAGES_ERROR_FILE_TOO_LARGE_KEY, STRUTS_MESSAGES_ERROR_UPLOADING_KEY, STRUTS_MESSAGES_INVALID_CONTENT_TYPE_KEY, STRUTS_MESSAGES_INVALID_FILE_KEY`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `ActionFileUploadInterceptor()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `protected MultiPartRequestWrapper`
  `findMultipartRequestWrapper(jakarta.servlet.http.HttpServletRequestWrapper request)`
  Tries to find `MultiPartRequestWrapper` as the request can be already wrapped with another `HttpServletRequestWrapper`.
  `String`
  `intercept(ActionInvocation invocation)`
  Override to handle interception

  ### Methods inherited from class org.apache.struts2.interceptor.AbstractFileUploadInterceptor

  `acceptFile, applyValidation, getTextMessage, getTextMessage, getTextProvider, isNonEmpty, setAllowedExtensions, setAllowedTypes, setContainer, setMatcher, setMaximumSize`

  ### Methods inherited from class org.apache.struts2.interceptor.AbstractInterceptor

  `destroy, init, setDisabled, shouldIntercept`

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

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

- ## Field Details

  - ### LOG

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

- ## Constructor Details

  - ### ActionFileUploadInterceptor

    public ActionFileUploadInterceptor()

- ## Method Details

  - ### intercept

    public String intercept(ActionInvocation invocation) throws Exception
    Description copied from class: `AbstractInterceptor`
    Override to handle interception
    Specified by:
      `intercept` in interface `Interceptor`
    Specified by:
      `intercept` in class `AbstractInterceptor`
    Parameters:
      `invocation` - the action invocation
    Returns:
      the return code, either returned from `ActionInvocation.invoke()`, or from the interceptor itself.
    Throws:
      `Exception` - any system-level error, as defined in `Action.execute()`.

  - ### findMultipartRequestWrapper

    protected MultiPartRequestWrapper findMultipartRequestWrapper(jakarta.servlet.http.HttpServletRequestWrapper request)
    Tries to find `MultiPartRequestWrapper` as the request can be already wrapped with another `HttpServletRequestWrapper`. If the `MultiPartRequestWrapper` cannot be found, null is returned instead.
    Parameters:
      `request` - current `HttpServletRequestWrapper`
    Returns:
      `MultiPartRequestWrapper` or null
    Since:
      7.0.0