9

我有一个带有属性 id、desc 和 imageByteArray 的表单 bean。Struts 动作被执行,它重定向到一个 JSP,我想在其中访问这些 bean 属性,如 id、desc 并转换 imageByteArray 并将其显示为图像。我试过这篇文章,但这对我不起作用。

我使用 Base64 对字节数组进行编码 - 其中 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 中显示为图像吗?

4

2 回答 2

12

你得到的只是一个数组的 toString 输出。但是,您需要将字节数组转换为字符串。

您应该在 bean 中创建一个方法


public String getByteArrayString()
{
   return new String(this.imageByteArray);
}

并在您的 JSP 中引用它。

虽然从技术上讲,您应该为 base64 字节数组定义使用哪种编码,这不是必需的,因为所有字符都在标准的 7 位 ASCII 范围内。

于 2012-05-09T06:08:03.070 回答
3

DoubleMalt 的回答(在撰写本文时已被接受)是不幸的,因为它有点用两个错误来纠正。Apache Commons Codec 让做错事变得如此容易并没有帮助:(

Base64 基本上是从二进制数据到文本的编码 - 因此,它几乎总是应该用于将 a 转换byte[]为 a String。您的问题是您正在将 a 转换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。

于 2015-08-06T07:16:40.400 回答