大家好,又见面了,我是你们的朋友全栈君。
有一些程序在sql server中存储图片的方式是通过二进制存储导数据库的,那么保存进去之后,怎么把图片显示出来呢?
直接上代码,servlet后台代码:
byte[] b1 = ””;//数据库查询出来的二进制
InputStream in = new ByteArrayInputStream(b1);
response.setContentType("image/jpg");
OutputStream out = response.getOutputStream();
byte[] b2 = new byte[1024];
int j = 0;
while ((j = in.read(b2)) != -1) {
out.write(b2, 0, j);
}
out.flush();
out.close();
in.close();
因为数据库存储的image类型对应Java的数据类型是byte[]型,所以这边是用byte[]型来接受图片数据,然后在jsp这边:
<img src="/servlet/showImageServlet" style="border-radius:10px;width:100px; height:50px;">
然后在浏览器上就直接显示该图片了:
还可以将数据库的图片查询出来并保存到相对应的系统文件夹:
byte[] bytes1 = “”//数据库查询出来的二进制;
ByteArrayInputStream bais = new ByteArrayInputStream(bytes1);
BufferedImage bi1 = ImageIO.read(bais);
File w2 = new File("c://新建文件夹", "照片名字.jpg");// 可以是jpg,png,gif格式
ImageIO.write(bi1, "jpg", w2);// 不管输出什么格式图片,此处不需改动
当然,如果数据库是多张图片的话,就给个循环把所有图片都输出就可以了:
以下两个方法是byte2hex()二进制转字符、hex2byte()字符转二进制代码:
public static String byte2hex(byte[] b) // 二进制转字符串
{
StringBuffer sb = new StringBuffer();
String stmp = "";
for (int n = 0; n < b.length; n++) {
stmp = Integer.toHexString(b[n] & 0XFF);
if (stmp.length() == 1) {
sb.append("0" + stmp);
} else {
sb.append(stmp);
}
}
return sb.toString();
}
public static byte[] hex2byte(String str) { // 字符串转二进制
if (str == null)
return null;
str = str.trim();
int len = str.length();
if (len == 0 || len % 2 == 1)
return null;
byte[] b = new byte[len / 2];
try {
for (int i = 0; i < str.length(); i += 2) {
b[i / 2] = (byte) Integer
.decode("0X" + str.substring(i, i + 2)).intValue();
}
return b;
} catch (Exception e) {
return null;
}
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/129466.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...