首先,我知道在数据库中保存Base64字符串不是保存图像的最有效方法,但是我没有很多,并且很少加载它们,因此这不成问题。
因此,让我们开始吧,我有一个带有“图片”表的SQL数据库,该表具有两列,一个唯一名称和一个表示基数为64的文件的字符串:
@Entity
public class Picture {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Column(unique = true)
private String name;
private String imageInBase64;
}
用户能够在用户界面中选择图像,然后通过REST将其发送到后端。我的问题是,我应该在将文件/图片发送到后端之前将其编码为Base64还是在接收到文件后在后端进行编码?目前,我只是在前端对其进行编码,并发送一个表示Picture类的JSON。
答案 0 :(得分:1)
这是来自这篇文章... Storing image in database directly or as base64 data?
我认为图像(文件)通常不存储在以base64编码的数据库中。相反,它们以原始二进制形式存储在二进制(blob)列(或文件)中。
Base64仅用作传输机制,不用于存储。例如,您可以将base64编码的图像嵌入XML文档或电子邮件中。
Base64也是流友好的。您可以即时进行编码和解码(无需知道数据的总大小)。
虽然base64适合传输,但不要存储以base64编码的图像。
Base64不提供校验和或任何具有任何值的存储空间。
Base64编码使原始二进制格式的存储需求增加了33%。它还增加了必须从持久性存储中读取的数据量,持久性存储通常仍是计算中的最大瓶颈。通常,读取较少的字节并实时对其进行编码会更快。仅当您的系统受CPU约束而不是IO约束,并且您定期在base64中输出映像时,才考虑将其存储在base64中。
内嵌图像(HTML中嵌入的base64编码图像)本身就是一个瓶颈-您要通过网络发送33%的数据,并以串行方式进行处理(网络浏览器必须等待内嵌图像才能完成下载页面HTML)。
如果您仍然希望存储以base64编码的图像,请执行任何操作,请确保不要将以base64编码的数据存储在UTF8列中,然后对其进行索引。