繁体   English   中英

将base64字节数组转换为图像

[英]Convert base64 byte array to an image

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

我使用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中显示为图像?

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

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


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

并在您的JSP中引用它。

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

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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM