我正在尝试从数据库中检索图像。 目前我能够展示:
`com.mysql.jdbc.Blob@2aba2aba `
在我的jsp输出中。 我可以知道如何将其转换为图像吗?
我使用以下内容来调出上述内容
photo[i].getPhotoFileData();
答案 0 :(得分:3)
与HTML相比,HTML文档的工作方式更是一个问题。您需要了解HTML不会直接嵌入图像。相反,它使用<img>
标记来引用托管在不同网址上的图片。
为了在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);
}
}
}
注意:此代码尚未经过测试甚至编译,只能用作起点。
答案 1 :(得分:1)
你得到一个Blob对象 - 而不是它的内容。如果要获取原始字节数据,则必须向Blob对象询问它,例如:
Blob blob = photo[i].getPhotoFileData();
byte[] data = blob.getBytes(0, blob.length());
如果您想动态创建图像,请调用:
BufferedImage img = ImageIO.read(new ByteArrayInputStream(data));
然后你可以保存图像或...实际上我不知道还有什么。事情。东西。显示它。打印。无限的可能性!就像在zombo.com上一样!
答案 2 :(得分:0)
首先将blob转换为输入流到字符串。然后使用该String而不是图像URL。
将blob转换为String
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>