前言:今天做个功能需要展示图片到页面,并不是下载,在网上搜了老半天,大部分都是下载,有的话也是只能在IE下进行输出,其它浏览器就都是下载了。
Action代码:
public String processImage(){
String key = ServletActionContext.getRequest().getParameter("key");
if(StringUtils.isEmpty(key)){
return "nofindImage";//没有找到图片
}
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.processDefinitionKey(key)
.singleResult();
String diagramResourceName = processDefinition.getDiagramResourceName();
InputStream imageStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), diagramResourceName);
ServletActionContext.getContext().put("imageStream", imageStream);
return "processImage";
}
注:这里将InputStream放到了Struts2的对象站里面
此外,也可以通过在action中添加一个getInputName()的方法,在这个方法里面返回上面的InputStream
XML配置:在action中添加结果
<result name="processImage" type="stream">
<param name="contentType">image/png</param>
<param name="inputName">imageStream</param>
<param name="bufferSize">4096</param>
</result>
注:inputName的值对应了我们在action中放入对象栈的key,因为StreamResult的源码中获得inputName就是从栈中获取。
其它说明:网上部分代码是在action中将InputStream通过Response直接输出,并返回一个null,这样在ie下是可以直接显示图片,在其他浏览器里面都是下载的方式。