Answer mentioned here这对我不起作用我已将字节数组发送到数据库,该数据库存储为数据库中的blob
File file = new File(filePath);
byte[] imageData = new byte[(int) file.length()];
当我尝试从此字节数组中的数据库中检索blob对象时
我得到这样的值“[B @ 526d24d9”。我将此值发送到jsp页面。(我将一个blob列表发送到jsp页面,即字节数组列表)现在我正在尝试使用jsp在网页上呈现此图像。但我无法找出最有效的方法,一种方法是检索blob列表,处理它并将其存储在一个文件中,然后使用标签从jsp页面中的该文件路径检索但是我正在寻找更多有效的方法。 I am trying to something like this
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”
在实体类中创建String previewUrl字段。并在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>
这会奏效
请记住,来自数据库的数据是图像文件的实际字节数。您需要在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的输出流。
最后一点:我对第一个片段感到有点困惑 - 您是从文件还是从数据库中检索图像数据? (如果是后一种情况,可能会错误地计算字节数组的大小)