大家好,又见面了,我是你们的朋友全栈君。
数据库的存储系列———将图片存储到数据库
在很多时候我们都使用数据库才存储我们的数据,然而我们通常在数据库里面存放的数据大多都支持数或者是一些字符,那么如果我们想在数据库里面存放图片,那么应该要怎么做的?
第一,我们可以将图片所在的路径或者URI存入到数据库里面,这样简单方便。不过这样的缺点也很显然,就是图片路径改变的时候,我们没有办法通过数据库来获取这一张图片。所以这种方法并不是我们所想要的将图片存储到数据的方法。
第二,将图片转化成二进制字节流才存储到数据库。在查看数据库所支持的基本类型当中,我们不难发现数据库支持BLOB和CLOB这种数据类型。那么我们就将图片以这种形式存入到数据库,然后在从数据库中还原这图片
public class ImageUtil {
public static void main(String[] args) throws IOException {
String imagePath = "C:\\Users\\pc\\Desktop\\446968702368648824.jpg";
byte[] bytes = null;
// 将图片转化为二进制流
bytes = imageToByte(imagePath);
for (byte byte1 : bytes) {
System.out.print(byte1);
}
// 将二进制图片转化为字符串
// String string = new String(bytes);
// System.out.println(string);
String path = "C:\\Users\\pc\\Desktop\\446.jpg";
// 将二进制流转化为图片
byteToImage(bytes, path);
}
public static byte[] imageToByte(String path) throws IOException {
FileInputStream fileInputStream = new FileInputStream(new File(path));
byte[] bytes = new byte[fileInputStream.available()];
fileInputStream.read(bytes);
fileInputStream.close();
return bytes;
}
//输出图像到新的路径
public static void byteToImage(byte[] bytes,String newPath) throws IOException {
FileOutputStream fileOutputStream = new FileOutputStream(new File(newPath));
fileOutputStream.write(bytes);
fileOutputStream.close();
}
}
这样就可以通过将图片的字节流放入到数据库中存储了,如果要使用的话,将其转化出来就可以了。不过这里图片不能够太大,BLOB最大能够支持64K的图片,不同数据库有不同的数据类型,大家可以去找找。当然以上代码还提供了能将二进制流变为了字符串的方法(显示看到的是乱码)。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/158243.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...