将文件 base64 保存在 blob 列中

Posted

技术标签:

【中文标题】将文件 base64 保存在 blob 列中【英文标题】:Save file base64 in blob column 【发布时间】:2021-12-22 03:22:41 【问题描述】:

我有一个像这样的以 64 为基数的可变字符串:

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQA.......

我需要将其保存在列类型 blob 中,我需要解码我认为的字符串以及保存到 blob 列之前的更多内容

【问题讨论】:

如何解码字符串?我觉得你可以直接保存到BLOB列。 我可以直接将base64保存在blob列吗?我应该保存所有字符串数据:image/jpeg;base64,/9j/4AAQSkZJRgABAQA....... 还是必须将其拆分为','?谢谢@AbuBakarKhan 你在使用 Spring JPA 吗?也许如果您分享一些与存储相关的代码,我可以提供更多帮助 我唯一不知道的是,如果要保存 blob,我是否会保存所有字符串数据:image/jpeg;base64,/9j/4AAQSkZJRgABAQA... 或者我必须拆分它跨度> 【参考方案1】:

根据RFC 2397,BASE64 字符串的 URL 部分在您的情况下为 data:image/jpeg;base64

假设您使用Standard Base64 Decoder,那么您需要拆分字符串才能将其解码为图像,如下面的代码所示:

import java.io.ByteArrayInputStream;
import sun.misc.BASE64Decoder;


def sourceData = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQA';

// tokenize the data
def parts = sourceData.tokenize(",");
def imageString = parts[1];

// create a buffered image
BufferedImage image = null;
byte[] imageByte;

BASE64Decoder decoder = new BASE64Decoder();
imageByte = decoder.decodeBuffer(imageString);
ByteArrayInputStream bis = new ByteArrayInputStream(imageByte);
image = ImageIO.read(bis);
bis.close();

// write the image to a file
File outputfile = new File("response.jpg");
ImageIO.write(image, "jpg", outputfile);

因此如果您想保存与图像文件格式相关的信息,请在保存到数据库 Clob 列时保留完整的 Base64 字符串,并且在读取时您只能解码数据部分(在 Base64 URL 之后)到实际图像,而 base64 URL 可以帮助确定图像的格式。

【讨论】:

谢谢,所以我会将整个字符串保存在 blob 列中,这样当我阅读时我可以看到是哪种格式,谢谢!! 欢迎您,如果它解决了您的问题,您可以标记为已接受的答案/点赞! 完成@AbuBakar Khan

以上是关于将文件 base64 保存在 blob 列中的主要内容,如果未能解决你的问题,请参考以下文章

Java 保存图片到数据库时,为啥要对图片进行base64编码

如何下载 Block Blob (Base64) 文件并使用 Azure Blob 存储将其转换为 PNG?

将 base64 编码图像保存到 Firebase 存储

java读取blob并用base64码进行保存

使用 Node Multer 缓冲区获取 Blob 并将 Blob 转换为 Base 64

如何将base64音频数据解码为wav格式