哪种更好的方式在Web应用程序中的服务器上存储图像?

Ram*_*Ram 4 c# asp.net directory webserver image

我正在开发一个Web应用程序,我需要在服务器上存储图像(这些是用户上传的).我正在为每个新图像生成新的Guid.我正在创建一个图像的三个图像,即原始图标,图标和拇指.我仍然使用三个不同的文件夹来保存这些.我的项目经理问我为什么我没有为每个用户创建不同的文件夹.所以我的问题是哪种更好的方法来存储以下内容之间的图像:

1).仅在三个文件夹中上传图像,即原始图标,图标和拇指,或2).为每个用户创建文件夹,然后在其中创建三个文件夹,用于原始,拇指和图标.有一件事我想问一下,如果用户数量超过100000那么它会影响性能吗?

这是更好的方法.请帮我决定.谢谢

jsa*_*nen 9

我会按用户存储图像.但是,鉴于您可能拥有大量用户,可能并不那么简单.

用户文件上传只是:用户特定的文件上传.管理这些文件时,通常需要为每个用户应用各种过程.例如:1)删除用户帐户并删除所有相关文件,2)计算用户使用的空间量,3)列出用户上传的所有文件等.

如果将这些文件分散到各个目录中,则有效实现上述过程要困难得多.

您指定可能有超过100.000个用户.根据您的文件系统,您可能会因此而遇到麻烦.例如,在ext3中,每个目录最多有32K个子目录,这对于按用户组织目录中的文件可能会有问题(请参阅:我可以在目录中放入多少个文件?).

假设我们无法在目录中存储超过32K的文件或目录,那么您需要找到一种方法来解决此限制.例如,您可以根据用户名中的第一个字母将用户文件夹拆分为多个子目录(并为所有其他起始字符添加额外的子目录):

users
   a
      aaron
         ...
   b       
      bertie
         ...
   ...
   misc
      _foobar 
         ...
      @jack
         ...
Run Code Online (Sandbox Code Playgroud)

现在,100000/25=4000每个目录只有大约用户,这在给定的32K下.

在盒子外面思考,将图像作为文件存储在平面文件系统中可能不是正确的选择.有专门为存储和处理大量文件而创建的数据库系统.以MongoDB的GridFS为例.它非常高效,可以扩展到大量文件,还可以处理所有较低级别的问题,例如正确的文件系统使用.在MS SQL中有FILESTREAM存储,它特别擅长在NTFS文件系统上存储文件.