ASP.NET 多用户商城 商家和用户图片空间 图片管理的设计
大型多用户电商商城会有大量的图片,除了本身系统的静态图片资源外,大部分是由用户上传的。由于日积月累图片上传的将会越来越多,如果统一都是上传至一个文件夹后期将很难管理。因此对于上传图片的管理势在必行。
1、日期作为文件夹进行保存
因此问题就诞生了,在大部分情况下设计系统的时候上传图片都是按照日期作为文件夹去存储,即每天一个文件夹存储N多的图片,所有业务类型的图片都存储在当天的文件夹,如20180601文件夹存储当前所有上传的文件
2、日期文件夹+业务文件夹
如所有的用户都需要上传头像,商家需要上传主图、详情页图、广告图,那么系统在设计的时候就可以将图片存储到不同的业务文件及下。
如:
-20180601
-Avatars
-MainPicture
-GoodsDetail
-Advertisement
经过这样排列的话在服务端文件管理上会相对更加清晰一点。
3、文件服务端+OSS存储
文件的存储路径、文件夹划分按照第二种类型存储,但是但存储本地服务器一份的话在数据访问负载、安全性上都会存在问题,因此可以考虑在本地服务器上存储一份文件,在阿里OSS或七牛云存储或其他云服务提供商的图片或文件存储服务进行备份存储,而实际本地服务器的才是作为备份,远程云服务的才是作为外部访问。
如何将上传的图片、文件二次存储到云服务商提供的文件云存储服务上,博主之前写过一边关于如何上传文件图片到 阿里云OSS的文章
ASP.NET MVC使用LAYUI 上传图片/文件到阿里OSS
4、服务端:日期文件夹+业务文件夹 数据库:虚拟文件夹 文件关联
完成上述1、2、3三种方式的文件存储优化对于系统管理员或者程序员而言已经可以有效的对图片、文件进行查找管理了。
但是对于C端用户而言很难管理自己上传的图片,上传了就是上传了,造成了以下问题:
1)无法查看历史上传图片
2)图片/文件重复上传、无用图片无法管理
因此我们需要设计一个逻辑上的图片/文件管理模式,将用户上传的文件进行有效的逻辑分类,并持久化。
最终实现效果如下,每个用户都能管理自己上传的图片:
数据库设计如下:
文件夹表PDM:(用于存储用户或商家所创建的文件夹及默认文件夹)
图片/文件表PDM:(用于存储图片/文件的本地Url和服务端Url)
图片文件夹关联表PDM:(用于存储用户上传的图片/文件 与 对应业务文件夹的关系)
如:
用户ID 1 用户名 张三
用户注册成功后默认会在Folder中创建 Avatar、Posts文件夹,即在Folder中添加两行数据
1 1 Avatar 头像文件夹 0 1 1 2018-06-01 23:13
2 1 Posts 发布文件夹 0 1 1 2018-06-01 23:13
用户上传头像上传的实际物理路径是在/20180601/Avatars/2018060123109578.png,随后存储“图片文件夹关联表”的 关联用户上传图片的物理路径到用户业务文件夹
对应插入File数据:
1 /20180601/Avatars/2018060123109578.png http://img.*****.com/20180601/Avatars/2018060123109578.png 1 1 2018-06-01 23:13 1 2018-06-01 23:13 0
对应插入的PictureFolderRelation数据:
1 1 1 1 2018-06-01 23:13 1 2018-06-01 23:13 0
后期将针对图片管理进行更多的解读及代码编写解读。