我正在寻找一种方法来在事件(活动)的文件系统上存储个人资料图像(传单) 由于以下原因,我打算使用base64编码的图像作为json发送到后端:
到目前为止我找到的最佳答案(最热门的投票)是这一个:
https://serverfault.com/questions/95444/storing-a-million-images-in-the-filesystem
由于可能有很多事件,随着时间的推移可能会有很多图像。
第一个建议是:
不要存储数据库的实际路径。最好存储图像 序列号到数据库并具有可以生成路径的功能 从序列号。 e.g:
文件路径= generatePathFromSequenceNumber(sequenceNumber);
从这个序列号,我将能够得到路径&要存储在我的数据库中的文件名 这可能是一个愚蠢的问题,但我如何从base64编码的字符串中导出序列号?
答案 0 :(得分:1)
如果您采用该建议,序列ID可能是您创建的数据库中记录的关键。
使用三级树也是一个很好的建议。
然而,我不是直接获取序列号并将其转换为递增路径,而是如何生成散列或半随机代表图像并将其用于路径(如果不是散列,则可能是随机的)十六进制字符串或UUID)。
如果您将序列ID直接转换为编号文件名,如答案中所示,则在开始填充第二个目录之前,最终会将10000个文件写入第一个目录。我认为尝试在顶级目录中实现随机分布是个好主意。当您获得100万个文件时,为什么要支付读取跨目录的目录中1000个文件的全部成本(因为这就是所有将要使用的),而您可以将它们均匀地分布在所有叶子目录中。如果不出意外,它可以让您轻松地将树分布在多个文件系统上(可能是因为它们位于不同的服务器上)。
因此,在我自己的应用程序(工作中)中,键是UUID,因此,例如,我的第一个键可能是aa082512eeb64694a24c16601b4d9f05
。然后将其放在aa0/825/aa082512eeb64694a24c16601b4d9f05.jpg
中。我不确定该项目到目前为止有多少文件,但我们已经存储了2TB的图像(主要是1920x1080,不限于150KB文件)。
我们的未来计划是添加功能检测代码,仅使用IE9的iframe,并在IE10,Chrome,Firefox等中使用更现代的东西。
答案 1 :(得分:0)
由于以下原因,我打算使用base64编码的图像作为json发送到后端:
- 仅适用于文件大小限制为150kB的个人资料图片(我的webapp目前不再处理图像);
- 最简单的网络浏览器兼容性解决方案;
请记住,存储base64编码数据的开销为33%。如果你有大量的项目,即使它们只有150KB,这也不是一件容易的事。 Base64也不是远程最简单的Web浏览器兼容性解决方案......原始的二进制映像是。
我强烈建议您在此重新考虑您的计划。如果您存储编码图像,则会浪费磁盘空间并阻止自己对图像执行任何操作,除非您先对其进行解码。
这可能是一个愚蠢的问题,但我如何从base64编码的字符串中获取序列号?
你不会。该序列号是图像数据库中的ID号。你有一个数据库,有关这些图像资产的额外数据,对吗?