It seems you need the action the <s:url
from that you could substitute in the <img
tag as href
attribute to retrieve the image similar to use static images like in the /images
folder.
Let's call it ImageAction
. This is a simple action that writes to the response out. To use it you need to put the file with image into the session. Because images are retrieved by the separate threads. In the execute method write
@Action(value = "image", interceptorRefs = @InterceptorRef("basicStack"))
public class ImageAction extends ActionSupport {
public String execute() {
Get the file from the session
File file = session.get("file");
then you need to read file
FileInputStream fis = new FileInputStream(file);
byte[] data = new byte[fis.available()];
fis.read(data);
fis.close();
then write to the response out
response.setContentType("image/png");
BufferedImage bi;
OutputStream os = response.getOutputStream();
bi = ImageIO.read(new ByteArrayInputStream(data));
ImageIO.write(bi, "PNG", os);
os.flush();
and return NONE result because this action only writes to the response
return NONE;
}
done
then in the JSP forwarded from your action just use <img src="<s:url action="image"/>" style="width:100%;"/>
. If you need to add path then use namespace annotation on the action and attribute in the url.
I feel you are familiar with the session concept in the Struts2, i.e. how to inject the session into your action and map objects in it. Map the file object in your action before return the result.
Good luck.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…