我正在开发一个将图像存储在文件系统中的应用程序。例如,如果用户上传名为“ green.jpg
”的图像,它将被存储为 /wwwroot/images/f/c/3/fc3b16ee-9254-11e9-bc42-526af7764f64.jpg
在数据库中,我将有一个表,其中包含图像名称及其原始名称:
UUID Name
fc3b16ee-9254-11e9-bc42-526af7764f64 green.jpg
我希望生成的html看起来像:
<img src="/whatever/green.jpg">
所以问题是当浏览器请求“ green.jpg”时,如何提供 /wwwroot/images/f/c/3/fc3b16ee-9254-11e9-bc42-526af7764f64.jpg “”
生成 /wwwroot/whatever/green.jpg 并不是一个好主意,因为可能会发生名称冲突和辅助磁盘io。
我想要的是生成的HTML中的文件名是人类可读的,但是以一种可以避免文件名冲突的方式存储,并且目录中没有太多文件。
为UUID的每个字母生成一个新目录可以解决这两个问题,但是我不知道这是一个好主意。
使用UUID并不重要,仅文件路径的唯一性才重要。即使我使用整数作为唯一标识符,即使会有数百万个图像,拥有数百万个目录也可能太多。
如果那很重要,我将PostgreSQL作为数据库引擎,并将在Linux上运行该应用程序。我不知道我将使用哪种文件系统,可能是ext4。