将byte[]转换为图片并在jsp上显示
Posted
技术标签:
【中文标题】将byte[]转换为图片并在jsp上显示【英文标题】:Convert byte[] to image and display on jsp 【发布时间】:2016-04-06 05:46:16 【问题描述】:我正在尝试在 jsp 页面上显示上传的图片(现在是字节数组)。现在,byte[] 列存在于数据库中,必须转换为图像。
这是我一直在尝试的:
jsp页面部分表格:
<c:forEach var="user" items="$userList">
<tr>
<td>$user.fileName</td>
<td>
<img src="data:image/jpg;base64,$user.imageFile" >
</td>
从 MultipartFile 对象中获取字节数组的控制器部分:
@RequestMapping(value = "/register", method = RequestMethod.POST)
public ModelAndView userRegister(@ModelAttribute("user") @Valid User user, BindingResult result, ModelMap model, @RequestParam("fileData") MultipartFile fileData) throws Exception
if (!fileData.isEmpty() && fileData != null)
byte[] bytes = fileData.getBytes();
user.setFileName(fileData.getOriginalFilename());
user.setImageFile(bytes);
如果需要任何其他信息,请告诉我。谢谢。
【问题讨论】:
我认为您需要将字节数组转换为 base64 字符串。请看***.com/a/33552306/2308683 @cricket_007 我仍然不知道如何在我的jsp中使用这个Base64字符串。 让user.imageFile
成为字符串而不是字节数组。
【参考方案1】:
您可以将临时的base64imageFile
属性添加到您的User
。它将保存图像的 base64 编码字符串,您可以在 jsp 中访问它,例如
<img src="data:image/jpeg;base64,$user.base64imageFile"/>
在你的方法中你应该进行编码,类似于
@RequestMapping(value = "/register", method = RequestMethod.POST)
public ModelAndView userRegister(@ModelAttribute("user") @Valid User user, BindingResult result, ModelMap model, @RequestParam("fileData") MultipartFile fileData) throws Exception
if (!fileData.isEmpty() && fileData != null)
byte[] bytes = fileData.getBytes();
user.setFileName(fileData.getOriginalFilename());
user.setImageFile(bytes);
byte[] encodeBase64 = Base64.encodeBase64(bytes);
String base64Encoded = new String(encodeBase64, "UTF-8");
user.setBase64image(base64encoded);
IOUtils
和 Base64
是来自 org.apache.commons
的一个方便的实用程序类,查找应该没有问题
【讨论】:
谢谢。有效。我使用基本的 java.util.Base64 类方法进行 base64 编码。Base64.getEncoder().encode(bytes)
我还必须补充一点,如果显示的图像大于允许的 URI 大小,浏览器可能无法显示图像。以上是关于将byte[]转换为图片并在jsp上显示的主要内容,如果未能解决你的问题,请参考以下文章
将 Yuv420 转换为 rgb 并在 qt pixmap 上显示
java中如何让byte[]与string类型转换后,保持不变