我有一个带有属性id,desc和imageByteArray的表单bean。 Struts动作被执行并重定向到JSP,我想访问这些bean属性,如id,desc,并转换imageByteArray并将其显示为图像。我试过这个post,但那对我不起作用。
我使用Base64对bytearray进行编码 - 其中this.bean.imageByteArray引用表单bean
this.bean.setImageByteArray(new org.apache.commons.codec.binary.Base64().encode(imageInByteArr));
我试过了,但没有工作
<img src="data:image/jpg;base64,<c:out value='${bean.imageByteArray}'/>" />
字节数组(byte [] imageByteArray)引用base64编码的JPG图像,并且我将以下img标记作为输出,显然没有任何内容显示,
<img src="data:image/jpg;base64,[B@2e200e">
知道如何转换base64字节数组并在JSP中显示为图像吗?
答案 0 :(得分:12)
你得到的只是数组的toString输出。但是,您需要将字节数组转换为String。
你应该在bean中创建一个方法
public String getByteArrayString()
{
return new String(this.imageByteArray);
}
并在JSP中引用它。
虽然从技术上讲你应该定义用于base64字节数组的编码,但这并不是必需的,因为所有字符都在标准的7bit ASCII范围内。
答案 1 :(得分:3)
DoubleMalt的答案(在撰写本文时被接受)是不幸的,因为它有点使用两个错误来做出正确的答案。 Apache Commons Codec使错误的做法变得如此容易,这无济于事(
Base64基本上是从二进制数据到文本的编码 - 因此,它几乎总是用于将byte[]
转换为String
。您的问题是您正在将byte[]
转换为另一个byte[]
- 但您稍后希望将该数据用作字符串。最好以正确的方式转换一次。
现在您可以准确选择何时转换为base64(和字符串)。您可以在Java代码中尽早完成,在这种情况下我会使用:
// Obviously you'd need to introduce a new method for this, replacing
// setImageByteArray
this.bean.setImageBase64(new Base64().encodeToString(imageInByteArr));
<img src="data:image/jpg;base64,<c:out value='${bean.imageBase64}'/>" />
或者,您可以只在bean中保留二进制数据,并在JSP中执行编码。自从我编写了任何JSP以来已经很长时间了,所以我不打算在这里编写代码。
但基本上,您需要确定您的bean是应该将原始二进制数据保留为byte[]
,还是将base64编码的数据保留为String
。其他任何事都是误导,IMO。