将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);
        
    

IOUtilsBase64 是来自 org.apache.commons 的一个方便的实用程序类,查找应该没有问题

【讨论】:

谢谢。有效。我使用基本的 java.util.Base64 类方法进行 base64 编码。Base64.getEncoder().encode(bytes) 我还必须补充一点,如果显示的图像大于允许的 URI 大小,浏览器可能无法显示图像。

以上是关于将byte[]转换为图片并在jsp上显示的主要内容,如果未能解决你的问题,请参考以下文章

将 Yuv420 转换为 rgb 并在 qt pixmap 上显示

c#怎么把byte数组转换成图像

在C#中如何将byte[] 类型转换为图片类型

java中如何让byte[]与string类型转换后,保持不变

Android - 如何将图片从 webview.capturePicture() 转换为 byte[] 并返回位图

VB.net 如何将数据转换为位图(Bitmap)所需要的byte()数组?急!!!!