Apache Struts 2 Documentation > 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
Added by tm_jee, last edited by Ted Husted on Jul 22, 2006 (view change)

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();
    	}

    }