使用Hibernate从数据库中检索Blob并使用JSP在Web页面上显示

3

答案在此处提到对我无效 我已将字节数组发送到数据库中,该数组作为 blob 存储在数据库中

File file = new File(filePath);
byte[] imageData = new byte[(int) file.length()];

当我尝试从数据库中检索blob对象时,以byte数组的形式获得了一个值,如"[B@526d24d9"。我将此值发送到jsp页面(我正在发送一个包含字节数组列表的blob列表)。现在,我正在尝试使用jsp在网页上呈现此图像。但是我无法找出最有效的方法。一种方法是检索blob列表,处理它并将其存储在文件中,然后使用 标签从jsp页面中的该文件路径中检索。但我正在寻找一种更有效的方法。我正在尝试做类似于这样的事情 jsp代码
<c:forEach items="${list}" var="list" varStatus="loop">
   <c:set var="l" value="${loop.index}" />

    <tr>
    <td><c:out value= "${l+1}" /></td>
      <td><c:out value="${list.name}" /></td>
      <td><c:out value="${list.size} MB" /></td>
      <td><c:out value="${list.preview}" /></td>
      <td><i class="material-icons">edit</i>
      <i class="material-icons" onclick="Remove()">delete</i></td>
    </tr>
  </c:forEach>

list.preview 包含字节数组 "[B@526d24d9"


你能分享一下你尝试在JSP上显示的代码吗? - codeLover
@codeLover 我已经编辑了代码。请再次查看一下。 - iron_man
请查看此解决方案 https://dev59.com/UmPVa4cB1Zd3GeqP7Z-B - codeLover
@codeLover,这对我的代码不起作用。 - iron_man
2个回答

2
在你的实体类中创建一个字符串预览URL字段,并在getter方法内编写以下代码。
public String getPreviewUrl() {
        String pu = Base64.encode(getPreview());
        setPreviewUrl(pu);
        return previewUrl;
    }

在您的JSP代码中,
<td><img class='imagem_artigo' src='data:image/png;base64,${list.previewUrl}' alt='IMG DESC' width="200" height='200'></td>

这将会有效。

1
非常感谢 @HeenaMittal。这段代码可以运行,而且这也是更好的方法。 - iron_man

1
请记住,来自您的数据库的数据是图像文件的实际字节。您需要在JSP中放置一个带有对图片的引用的标签。此外,您需要一个仅输出纯图像作为响应的控制器 - 不嵌入HTML。
对于步骤1,您的JSP应该长这样:
<tr>
  <td><c:out value= "${l+1}" /></td>
  <td><c:out value="${list.name}" /></td>
  <td><c:out value="${list.size} MB" /></td>
  <td><img src="<c:out value="${list.previewUrl}" />"></td>
  <td><i class="material-icons">edit</i>
  <i class="material-icons" onclick="Remove()">delete</i></td>
</tr>

在第一步中,您需要定义previewUrl并将其指向一个控制器,该控制器可以编写图像数据。

在第二步中,您需要创建这样的控制器,它将把图像字节数组的内容输出到HttpServletResponse的输出流中。

最后需要注意的是:我对第一个片段有些困惑 - 您是从文件还是从数据库检索图像数据?(如果是后者,则字节数组的大小可能被错误地计算)


我正在从文件中检索数据。 - iron_man
我应该在控制器类中添加什么代码?而这个字段previewurl应该在哪里定义? - iron_man

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接