我尝试从db获取图像然后在JSP页面中显示它们时遇到问题:
ImageAction:
public class ImageAction {
private byte[] itemImage;
public byte[] getItemImage() {
return itemImage;
}
public void setItemImage(byte[] itemImage) {
this.itemImage = itemImage;
}
public void execute() throws Exception{
try {
HttpServletResponse response = ServletActionContext.getResponse();
response.reset();
response.setContentType("multipart/form-data");
byte[] imgData =(byte[])ServletActionContext.getRequest().getSession()
.getAttribute("imageData");
System.out.println("imgData :: "+imgData);
itemImage = imgData;
ServletActionContext.getRequest().getSession().removeAttribute("imageData") ;
OutputStream out = response.getOutputStream();
out.write(itemImage);
out.flush();
out.close();
} catch (Exception e) {
System.out.println("error :: ");
e.printStackTrace();
}
// return "success";
}
}
JSP:
<tr >
<td> <%= map.get(mapKey) %> </td>
<td colspan="1" >
<img src="<s:url value="ImageAction" />" width="115" border="0" />
</td>
</tr>
答案 0 :(得分:1)
您在JSP页面上收到的内容将是原始byte[]
,您需要稍微处理一下,请检查以下内容:
<a src="" id="imageSrc"/>
显示图片的简单anchor
标记。
以下代码会将原始byte[]
转换为等效的Base64字符串,因此显示图像至关重要。
<%
byte data[]=request.getParameter(itemImage); //let itemImage for instance hold your data
String encodedData=Base64.encodeBytes(data);
%>
现在,您需要在JSP页面上设置一个小实用程序来设置base64数据
<script>
function imageBaseSixtyFourProcessor(baseSixtyFour){
var img = new Image();
img.src='';
var imageUrl='data:image/gif;base64,'+baseSixtyFour;
$('#imageSrc').attr('src',imageUrl);
img.src = imageUrl;
}
}
</script>
调用上述功能:
<script>
imageBaseSixtyFourProcessor(<%encodedData%>);
</script>
注意:在我的情况下,我正在显示GIF
文件,您可以根据自己的要求进行更改。
同样,您可以以相同的方式显示多个图像。
答案 1 :(得分:0)
明显的用法是将图像数据移动到某个集合,即Map
。该操作应该知道用于从地图中检索图像数据的mapKey
。
<s:iterator value="#session.imageDataMap">
<img src="<s:url value="ImageAction"><s:param name="mapKey" value="%{key}"/></s:url>" width="115" border="0" />
</s:iterator>
如果从会话中获取数据,则应修改代码以使用集合。
...
Map<String, byte[]> imgDataMap =(Map<String, byte[]>)ActionContext.getContext().getSession().get("imageDataMap");
imageData = imgDataMap.get(mapKey);
System.out.println("imgData :: "+new Base64Encoder.encode(imgData));
itemImage = imgData;
...
在上面的示例中,使用Struts 2会话映射而不是servlet会话。