Home > FAQs > How can we display dynamic or static images that can be provided as an array of bytes |

Apache Struts 2 Documentation
How can we display dynamic or static images that can be provided as an array of bytes
Edit Page Browse Space Add Page Add News

To display an image represented as an array of bytes

- Reference an Action for the image src attribute
- Provide a helper method on the Action to return an array of bytes
- Provide a Result Type that renders the array to the response

## Reference an Action

MyAction.jsp

    <img src="/myWebAppContext/myAction.do" />

## Provide Helper Methods

MyAction.java

    public class MyAction extends ActionSupport {
      public String doDefault() {
        return "myImageResult";
      }

      public byte[] getMyImageInBytes() { .... }

      public String getMyContentType() { ... }
      public String getMyContentDisposition() { ... }
      public int getMyContentLength() { .... }
      public int getMyBufferSize() { ... }

    }

## Provide a Custom Result Type

struts.xml

    <struts>

        ...
        <result-types>
            <result-type name="myBytesResult" class="MyBytesResult" />
        </result-types>
        ...
        <action name="myAction" class="MyAction">
            <result name="myImageResult" type="myBytesResult">
                <param name="contentType">${myContentType}</param>
                <param name="contentDisposition">${myContentDisposition}</param>
                <param name="contentLength">${myContentLength}</param>
                <param name="bufferSize">${myBufferSize}</param>
            <result>
        </action>
        ...

    </struts>

MyBytesResult.java

    public class MyBytesResult implements Result {

    	public void execute(ActionInvocation invocation) throws Exception {

    		MyAction action = (MyAction) invocation.getAction();
    		HttpServletResponse response = ServletActionContext.getResponse();

                    response.setContentType(action.getContentType());
    		response.setContentLength(action.getContentLength());

    		response.getOutputStream().write(action.getImageInBytes());
    		response.getOutputStream().flush();
    	}

    }