org.apache.struts2.result

## Class StreamResult

- java.lang.Object
- - org.apache.struts2.result.StrutsResultSupport
  - - org.apache.struts2.result.StreamResult

- All Implemented Interfaces:
    Serializable, Result, StrutsStatics

      public class StreamResult
      extends StrutsResultSupport

  A custom Result type for sending raw data (via an InputStream) directly to the HttpServletResponse. Very useful for allowing users to download content. This result type takes the following parameters:
  - contentType - the stream mime-type as sent to the web browser (default = `text/plain`).
  - contentLength - the stream length in bytes (the browser displays a progress bar).
  - contentDisposition - the content disposition header value for specifing the file name (default = `inline`, values are typically attachment;filename="document.pdf".
  - inputName - the name of the InputStream property from the chained action (default = `inputStream`).
  - bufferSize - the size of the buffer to copy from input to output (default = `1024`).
  - allowCaching if set to 'false' it will set the headers 'Pragma' and 'Cache-Control' to 'no-cache', and prevent client from caching the content. (default = `true`)
  - contentCharSet if set to a string, ';charset=value' will be added to the content-type header, where value is the string set. If set to an expression, the result of evaluating the expression will be used. If not set, then no charset will be set on the header

  These parameters can also be set by exposing a similarly named getter method on your Action. For example, you can provide `getContentType()` to override that parameter for the current action.

  Example:

       <result name="success" type="stream">
         <param name="contentType">image/jpeg</param>
         <param name="inputName">imageStream</param>
         <param name="contentDisposition">attachment;filename="document.pdf"</param>
         <param name="bufferSize">1024</param>
       </result>

  See Also:
    Serialized Form

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from interface com.opensymphony.xwork2.Result

      `Result.LegacyAdapter`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected boolean` | `allowCaching`
    `protected int` | `bufferSize`
    `protected String` | `contentCharSet`
    `protected String` | `contentDisposition`
    `protected String` | `contentLength`
    `protected String` | `contentType`
    `static String` | `DEFAULT_PARAM`
    `protected String` | `inputName`
    `protected InputStream` | `inputStream`
    `protected static org.apache.logging.log4j.Logger` | `LOG`

    - ### Fields inherited from class org.apache.struts2.result.StrutsResultSupport

      `DEFAULT_URL_ENCODING, parseLocation`

    - ### Fields inherited from interface org.apache.struts2.StrutsStatics

      `ACTION_MAPPING, HTTP_REQUEST, HTTP_RESPONSE, PAGE_CONTEXT, SERVLET_CONTEXT, SERVLET_DISPATCHER, STRUTS_ACTION_TAG_INVOCATION, STRUTS_PORTLET_CONTEXT`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `StreamResult()`
    `StreamResult(InputStream in)`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected void` | `doExecute(String finalLocation, ActionInvocation invocation)`
    `boolean` | `getAllowCaching()`
    `int` | `getBufferSize()`
    `String` | `getContentCharSet()`
    `String` | `getContentDisposition()`
    `String` | `getContentLength()`
    `String` | `getContentType()`
    `String` | `getInputName()`
    `protected boolean` | `isAcceptableExpression(String expression)` Checks if expression doesn't contain vulnerable code
    `void` | `setAllowCaching(boolean allowCaching)` Set allowCaching to `false` to indicate that the client should be requested not to cache the data stream.
    `void` | `setBufferSize(int bufferSize)`
    `void` | `setContentCharSet(String contentCharSet)`
    `void` | `setContentDisposition(String contentDisposition)`
    `void` | `setContentLength(String contentLength)`
    `void` | `setContentType(String contentType)`
    `void` | `setInputName(String inputName)`
    `void` | `setNotExcludedAcceptedPatterns(NotExcludedAcceptedPatternsChecker notExcludedAcceptedPatterns)`

    - ### Methods inherited from class org.apache.struts2.result.StrutsResultSupport

      `conditionalParse, conditionalParseCollection, doExecute, execute, getLastFinalLocation, getLocation, setEncode, setLocation, setParse`

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

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

    - ### Methods inherited from interface com.opensymphony.xwork2.Result

      `adapt, execute`

- - ### Field Detail

    - #### LOG

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

    - #### DEFAULT_PARAM

          public static final String DEFAULT_PARAM

      See Also:
        Constant Field Values

    - #### contentType

          protected String contentType

    - #### contentLength

          protected String contentLength

    - #### contentDisposition

          protected String contentDisposition

    - #### contentCharSet

          protected String contentCharSet

    - #### inputName

          protected String inputName

    - #### inputStream

          protected InputStream inputStream

    - #### bufferSize

          protected int bufferSize

    - #### allowCaching

          protected boolean allowCaching

  - ### Constructor Detail

    - #### StreamResult

          public StreamResult()

    - #### StreamResult

          public StreamResult(InputStream in)

  - ### Method Detail

    - #### setNotExcludedAcceptedPatterns

          public void setNotExcludedAcceptedPatterns(NotExcludedAcceptedPatternsChecker notExcludedAcceptedPatterns)

    - #### getAllowCaching

          public boolean getAllowCaching()

      Returns:
        Returns the whether or not the client should be requested to allow caching of the data stream.

    - #### setAllowCaching

          public void setAllowCaching(boolean allowCaching)

      Set allowCaching to `false` to indicate that the client should be requested not to cache the data stream. This is set to `false` by default
      Parameters:
        `allowCaching` - Enable caching.

    - #### getBufferSize

          public int getBufferSize()

      Returns:
        Returns the bufferSize.

    - #### setBufferSize

          public void setBufferSize(int bufferSize)

      Parameters:
        `bufferSize` - The bufferSize to set.

    - #### getContentType

          public String getContentType()

      Returns:
        Returns the contentType.

    - #### setContentType

          public void setContentType(String contentType)

      Parameters:
        `contentType` - The contentType to set.

    - #### getContentLength

          public String getContentLength()

      Returns:
        Returns the contentLength.

    - #### setContentLength

          public void setContentLength(String contentLength)

      Parameters:
        `contentLength` - The contentLength to set.

    - #### getContentDisposition

          public String getContentDisposition()

      Returns:
        Returns the Content-disposition header value.

    - #### setContentDisposition

          public void setContentDisposition(String contentDisposition)

      Parameters:
        `contentDisposition` - the Content-disposition header value to use.

    - #### getContentCharSet

          public String getContentCharSet()

      Returns:
        Returns the charset specified by the user

    - #### setContentCharSet

          public void setContentCharSet(String contentCharSet)

      Parameters:
        `contentCharSet` - the charset to use on the header when sending the stream

    - #### getInputName

          public String getInputName()

      Returns:
        Returns the inputName.

    - #### setInputName

          public void setInputName(String inputName)

      Parameters:
        `inputName` - The inputName to set.

    - #### doExecute

          protected void doExecute(String finalLocation,
                                   ActionInvocation invocation)
                            throws Exception

      Overrides:
        `doExecute` in class `StrutsResultSupport`
      Throws:
        `Exception`
      See Also:
        `StrutsResultSupport.doExecute(java.lang.String, com.opensymphony.xwork2.ActionInvocation)`

    - #### isAcceptableExpression

          protected boolean isAcceptableExpression(String expression)

      Checks if expression doesn't contain vulnerable code
      Parameters:
        `expression` - of result
      Returns:
        true|false
      Since:
        6.0.0

Copyright © 2000–2026 Apache Software Foundation. All rights reserved.