将base64字节数组转换为图像

时间:2012-05-09 05:40:24

标签: image jsp base64

我有一个带有属性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中显示为图像吗?

2 个答案:

答案 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。