文件管理系统的实现和设计
更新: 2025/3/13 12:08:48 字数: 0 字
需求分析
我们在项目中,一般需要一个文件系统,用户可以实现对文件的操作,比如上传、下载、删除等。
列举环境:
1. 在教务系统中,听课管理系统模块,老师在填写听课记录时,需要所听课教室的照片信息。
2. 在教务系统中,学生请假或者是销假是需要上传对应的证明材料。
3. 举个最简单的例子,我做一个博客系统,我的每篇博客需要上传对应的封面图片。
文件系统可以说是在项目中很常见的系统,但是又不简单,将文件存储好是文件系统的一大难题,就比如在我实习期间 企业做的房票系统,有上传材料的审批,但是他的这个系统只能进行材料的上传,而不能上传以上传的材料,虽然这样比较简单,但是 从项目长时间使用的角度来说,这个方案是不可取的。
我设计的文件系统会解决上述问题,并且支持本地存储,minio
存储和 阿里云oss
存储。 在确保文件到指定的位置,并且同步到数据库的情况下,还要保证文件的虚拟存储结构和正真的存储结构是比较接近,以便于后面的手工查询。
需要实现的功能:
需求
- 支持
oss
、mino
、本地
存储文件。 - 用户使用时,可能有部分存储到
oss
、有部分存储到minio
、有部分存储到本地
。
文件上传分两步:
- 上传到对应的位置。
- 同步到数据库,这一步看情况是非必须操作,同步的目的主要是为了查询方便。
实现思路
两种数据库存储方式:
方案一:
我们的系统是以模块为单位,比如:系统管理模块,而系统管理模块下面又有小菜单,比如:用户管理、角色管理、菜单管理等, 与用户相关的又有用户表。一共有三级模式,大多数系统都是这种模式,依次为例,创建一个用于存储文件的表,比如:file_pro_issue_col
, 这张表就用来储存上传的文件信息。
字段名 | 用处 |
---|---|
id | 表主键id |
project_id | 是属于哪一个项目 |
issue_id | 是属于哪一个小模块菜单 |
columns_id | 是属于那一张表记录的主键id |
...... | 其余描述文件字段 |
方案二:
以文件目录为单位,数据库同时存储文件的目录信息,并且可以支持手动创建文件目录,创建好的文件目录会有文件目录 id
,那么 在我们上传文件时就可以以这个文件目录 id
为父级目录,这样用户就可以在某个文件目录下上传文件。
字段名 | 用处 |
---|---|
id | 表主键id |
parent_id | 上级文件目录id |
is_dir | 0 文件夹,1 文件 |
...... | 其余描述文件字段 |