虽然看起来似乎不是这样,但对这个问题有一点疑问。 我不是在问我是不是应该使用DB或文件系统,它是文件系统,但我想问一下在文件系统中组织图片的最佳方法是什么,将与asp.net应用程序一起使用? 我说的是几十甚至几十万张图片。
稍微详细说明一下。
我已经完成了一些事情,但我在问是否有人有这方面的经验。也许它可以做得更好。
我放了这样的东西
我将图片存储在IIS文件夹中,因为将它们存储在iis之外会使它们因为路径而无法在Web中使用。您不能在Web中使用文件路径,它必须是虚拟文件路径。
http://images/1.jpg取代C:\ images \ 1.jpg
在根目录中我有每个图片大小的子文件夹
根 - + 400×300 + 600x400 1024×768 +
来自数据库的id命名图像。如果数据库中的ImageID是45678909,图片的名称是45678909.jpg它的位置是
VD \图像\ 400x300的\ 45 \ 67 \ 89 \ 45678909.jpg
VD \图像\ 600x400 \ 45 \ 67 \ 89 \ 45678909.jpg
我将图片名称逐两切片,然后创建子文件夹。关键是文件夹中没有超过100个文件。这个好主意还是愚蠢的?你会如何组织这个?对于个人而言,这个拥有大量文件夹的组织并不容易使用。
有任何建议或改进吗?
谢谢:)
答案 0 :(得分:3)
你的最后一个解决方案似乎是一个非常好的解决方案。文件访问速度可能因一个文件夹中的文件太多而减慢,超过1000个说,所以坚持100是好的。
在同步方面,您只需要一个定期运行的脚本,该脚本在数据库中查询应该存在的所有图像,并删除冗余图像。如果你的磁盘空间不紧张,那么你就不需要了。
可能有时候您希望其他服务器上的图像具有更好的可扩展性。我唯一能做的就是为你的图片设置一个子域名,例如images.yourdomain.com。即使您将其指向同一台服务器,也可以根据需要将图像转移到更快的文件服务器上。
答案 1 :(得分:1)
1)我不知道ASP或IIS,所以我在这里帮不了你。我将图像存储在Amazon S3上,但我不知道这是否与您的案例相关。
2)尝试根据他们的模型组织照片,然后是ID。因此,如果图像是用户头像图像,则您的路径看起来像头像/ ID /图像。
3)如果您创建了多个不同尺寸的图像,请尝试为每个尺寸指定一个名称。例如,您有“原始”图像,“缩略图”图像(90x90)和“预览”图像(400 * 300)。这样您就可以存储不同的尺寸,如头像/ ID / image_SIZE或头像/ ID / SIZE /图像。
4)如果您按照我提到的方式进行操作,那么您只需要在数据库中存储原始图像的信息,然后就可以在运行时获取所有其他图像。
所有这些都来自Ruby on Rails的惊人PaperClip插件。请查看它以获取有关如何存储文件和附件的进一步指导。