Skip to content

文件管理系统的实现和设计

更新: 2025/3/13 12:08:48 字数: 0 字

需求分析

  我们在项目中,一般需要一个文件系统,用户可以实现对文件的操作,比如上传、下载、删除等。

列举环境:
  1. 在教务系统中,听课管理系统模块,老师在填写听课记录时,需要所听课教室的照片信息。
  2. 在教务系统中,学生请假或者是销假是需要上传对应的证明材料。
  3. 举个最简单的例子,我做一个博客系统,我的每篇博客需要上传对应的封面图片。

  文件系统可以说是在项目中很常见的系统,但是又不简单,将文件存储好是文件系统的一大难题,就比如在我实习期间 企业做的房票系统,有上传材料的审批,但是他的这个系统只能进行材料的上传,而不能上传以上传的材料,虽然这样比较简单,但是 从项目长时间使用的角度来说,这个方案是不可取的。
  我设计的文件系统会解决上述问题,并且支持本地存储,minio 存储和 阿里云oss 存储。   在确保文件到指定的位置,并且同步到数据库的情况下,还要保证文件的虚拟存储结构和正真的存储结构是比较接近,以便于后面的手工查询。

需要实现的功能:

需求

  1. 支持 ossmino本地 存储文件。
  2. 用户使用时,可能有部分存储到 oss、有部分存储到 minio、有部分存储到 本地

文件上传分两步:

  1. 上传到对应的位置。
  2. 同步到数据库,这一步看情况是非必须操作,同步的目的主要是为了查询方便。

实现思路

两种数据库存储方式:

方案一:
  我们的系统是以模块为单位,比如:系统管理模块,而系统管理模块下面又有小菜单,比如:用户管理、角色管理、菜单管理等, 与用户相关的又有用户表。一共有三级模式,大多数系统都是这种模式,依次为例,创建一个用于存储文件的表,比如:file_pro_issue_col, 这张表就用来储存上传的文件信息。

字段名用处
id表主键id
project_id是属于哪一个项目
issue_id是属于哪一个小模块菜单
columns_id是属于那一张表记录的主键id
......其余描述文件字段

方案二:
  以文件目录为单位,数据库同时存储文件的目录信息,并且可以支持手动创建文件目录,创建好的文件目录会有文件目录 id ,那么 在我们上传文件时就可以以这个文件目录 id 为父级目录,这样用户就可以在某个文件目录下上传文件。

字段名用处
id表主键id
parent_id上级文件目录id
is_dir0 文件夹,1 文件
......其余描述文件字段

前端设计

道友再会.