我正在尝试从数据库中检索图像。目前我能够展示:
`com.mysql.jdbc.Blob@2aba2aba `
在我的jsp输出中。我可以知道如何将其转换为图像吗?
我用下面的来调出上面的
photo[i].getPhotoFileData();
与您的 JSP 相比,HTML 文档的工作方式是一个更大的问题。您需要了解 HTML 不会直接嵌入图像。相反,它使用<img>
标签来引用托管在不同 URL 上的图像。
为了在 HTML 页面上显示存储在数据库中的图像,您需要一个单独的 servlet 来处理对图像的请求。您的 JSP 应该呈现如下 HTML 文档:
<html>
<head>
...
</head>
<body>
...
<img src="www.mydomain.com/images/1234.png" />
...
</body>
</html>
然后,您将创建一个单独的 servlet 来处理对 /images 的所有请求,这将进行数据库调用并将原始字节从 blob 发送回响应的输出流。确保还根据您使用的图像编码正确设置 Content-Type 标头。
为了将图像发送回请求者,您有两个选项之一。您可以将 blob 的字节作为数组获取并将其写入 OutputStream(例如out.write(blob.getBytes(0,blob.length());
)。或者您可以使用该getBinaryStream()
方法,然后将字节从 InputStream 复制到 OutputStream。这是一个例子:
public static void copy(Blob from, OutputStream to)
throws IOException {
byte[] buf = new byte[4096];
try(InputStream is = from.getBinaryStream()) {
while (true) {
int r = is.read(buf);
if (r == -1) {
break;
}
to.write(buf, 0, r);
}
}
}
NB:这段代码没有经过测试甚至编译,它应该只是作为一个起点。
You're getting a Blob object - not it's contents. If you want to get raw byte data you have to ask the Blob object for it, e.g.:
Blob blob = photo[i].getPhotoFileData();
byte[] data = blob.getBytes(0, blob.length());
If you want to create an image on the fly, then just call:
BufferedImage img = ImageIO.read(new ByteArrayInputStream(data));
You can then save the image or ... actually I don't know what else. Thing. Stuff. Display it. Print. Limitless possibilities! Just like at zombo.com!
首先将 blob 转换为输入流到 string 。然后使用该 String 而不是图像 URL 。
将 blob 转换为字符串
try {
Blob blob = staticOffer.getImage(); //blob of image from db
strOut = new StringBuffer();
String aux;
BufferedReader br;
br = new BufferedReader(new InputStreamReader(blob.getBinaryStream()));
while ((aux=br.readLine())!=null) {
strOut.append(aux);
}
offerPicStr = strOut.toString();
} catch (Exception e) {
e.printStackTrace();
}
现在以下列方式使用该字符串 html/jsp
<img src="data:image/jpeg;base64,${offerPicStr}" width="100" height="100"></img>