java如何将图片转Base64编码字符串存储在数据库
解决方法:
1、mysql数据库的表里新增一个字段image_data,使用TEXT或LONGTEXT类型:
CREATE TABLE IMAGES(
id INT AUTO_INCREMENT PRIMARY KEY,
image_name VARCHAR(255),
image_data LONGTEXT,
upload_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
2、Java工具类:
以下工具类的main方法的base64Image变量就是图片转成的Base64编码字符串,直接用sql插入到表的image_data字段即可存储
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Base64;
public class ImageToBase64 {
/**
* 将图片文件转换为Base64字符串
* @param filePath 图片文件路径
* @return 带有MIME类型的Base64字符串,可直接用于img标签的src属性
* @throws IOException
*/
public static String convertImageToBase64(String filePath) throws IOException {
File file = new File(filePath);
return convertImageToBase64(file);
}
/**
* 将图片文件转换为Base64字符串
* @param file 图片文件对象
* @return 带有MIME类型的Base64字符串,可直接用于img标签的src属性
* @throws IOException
*/
public static String convertImageToBase64(File file) throws IOException {
// 获取文件扩展名,用于确定MIME类型
String fileName = file.getName();
String extension = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
String mimeType;
// 根据文件扩展名设置MIME类型
switch (extension) {
case "jpg":
case "jpeg":
mimeType = "image/jpeg";
break;
case "png":
mimeType = "image/png";
break;
case "gif":
mimeType = "image/gif";
break;
case "bmp":
mimeType = "image/bmp";
break;
case "webp":
mimeType = "image/webp";
break;
default:
mimeType = "application/octet-stream";
}
try (FileInputStream fileInputStream = new FileInputStream(file)) {
byte[] fileBytes = new byte[(int) file.length()];
fileInputStream.read(fileBytes);
String base64Content = Base64.getEncoder().encodeToString(fileBytes);
// 构建可直接用于img标签src属性的Base64字符串
return "data:" + mimeType + ";base64," + base64Content;
}
}
public static void main(String[] args) {
try {
String imagePath = "path/to/your/image.jpg";
String base64Image = convertImageToBase64(imagePath);
} catch (IOException e) {
e.printStackTrace();
}
}
}
3、前端页面显示,image_data字段的值直接在img标签的src属性中
<img src="image_data的值" alt="图片描述">