文件管理相关表
引用文件
目录
简介
本文件聚焦于文件管理模块的核心表结构与数据流转,围绕文件信息表(file_info)及其相关配置表,系统性说明字段定义、约束、业务含义与典型流程(上传、存储、下载)。同时给出跨数据库的表结构映射、字段说明、索引与主键设计考虑,并结合实际代码实现梳理上传与下载的关键控制流。
项目结构
文件管理相关的核心表位于基础设施模块的数据库脚本中,同时配套的控制器与服务层负责对外提供上传、下载与分片上传能力。文档结构如下:
- 数据库脚本:包含 MySQL、Oracle、SQLServer、达梦等多数据库方言的表结构定义
- 控制器与服务:提供文件上传、下载、预签名 URL 获取以及分片上传初始化等能力
- 文档:文件配置与模块概览说明
图表来源
- ruoyi-vue-pro.sql (MySQL)
- ruoyi-vue-pro.sql (Oracle)
- ruoyi-vue-pro.sql (SQLServer)
- FileController.java
- AppFileController.java
- FilePartUploadServiceImpl.java
章节来源
核心组件
本节聚焦文件信息表(file_info)与文件配置表(file_config),并简述文件内容表(file_content)的可选存在性。
-
文件信息表(infra_file)
- 主键:id(自增/序列)
- 关键字段:config_id(配置编号)、name(文件名)、path(文件路径)、url(文件URL)、type(文件类型)、size(文件大小)、creator/updater/create_time/update_time/deleted
- 约束:主键约束;部分数据库提供唯一性/非空约束(如 Oracle 的主键约束)
- 业务含义:记录一次文件上传后的元数据,便于后续下载与管理
-
文件配置表(infra_file_config)
- 主键:id(自增/序列)
- 关键字段:name(配置名)、storage(存储器类型)、remark(备注)、master(是否主配置)、config(存储配置JSON)、enable(是否启用)
- 约束:主键约束;部分数据库提供唯一性/非空约束
- 业务含义:定义文件存储后端(本地、云存储等)及默认主配置
-
文件内容表(infra_file_content)
- 可选表:用于存放文件二进制 内容(如数据库存储)
- 关键字段:config_id、path、content、creator/updater/create_time/update_time/deleted
- 业务含义:当采用数据库存储时,文件内容落库
章节来源
- ruoyi-vue-pro.sql (MySQL)
- ruoyi-vue-pro.sql (Oracle)
- ruoyi-vue-pro.sql (SQLServer)
- ruoyi-vue-pro-dm8.sql (达梦)
架构总览
文件管理模块的上传与下载流程由控制器驱动,服务层协调文件客户端与数据库持久化,最终形成“元数据+存储”的解耦架构。
图表来源
详细组件分析
文件信息表(file_info)字段说明与业务逻辑
-
字段与约束(以 MySQL 为例)
- id:bigint,自增主键,唯一标识文件
- config_id:bigint,外键关联 infra_file_config.id,标识该文件使用的存储配置
- name:varchar,原始文件名
- path:varchar,存储路径(相对或绝对,取决于存储策略)
- url:varchar,访问URL(可直接访问或预签名URL)
- type:varchar,文件类型(如图片、视频、APK等)
- size:bigint/int,文件大小(字节)
- creator/updater:varchar,创建/更新人
- create_time/update_time:datetime/timestamp,创建/更新时间
- deleted:bit/number,逻辑删除标记
-
业务含义
- 记录文件的元数据与访问信息,支撑下载、列表、分类等业务
- 通过 config_id 与存储配置解耦,便于切换存储后端
-
索引与设计考虑
- 主键:id
- 建议索引:config_id(按配置维度查询)、name(按文件名检索)、create_time(按时间排序)
- 复合索引:(config_id, create_time)、(type, create_time) 以优化常见查询
-
字段取值示例(示意)
- config_id:1
- name:"avatar_20250315.png"
- path:"avatars/2025/03/15/avatar_20250315.png"
- url:"https://cdn.example.com/avatars/2025/03/15/avatar_20250315.png"
- type:"image/png"
- size:1048576
章节来源
文件配置表(file_config)字段说明与业务逻辑
-
字段与约束(以 MySQL 为例)
- id:bigint,自增主键
- name:varchar,配置名(如“本地存储”、“阿里云OSS”)
- storage:tinyint,存储器类型(枚举值,如本地、S3、MinIO等)
- remark:varchar,备注
- master:bit,是否主配置(同一时刻仅允许一个主配置)
- config:varchar/json,存储配置参数(如域名、桶名、密钥等)
- enable:tinyint,是否启用
- creator/updater:varchar
- create_time/update_time:datetime
- deleted:bit
-
业务含义
- 统一管理文件存储后端参数
- 主配置决定默认存储策略;启用/禁用用于灰度与切换
-
字段取值示例(示意)
- name:"七牛存储器"
- storage:20
- master:1
- config:
{"endpoint":"s3.cn-south-1.qiniucs.com","domain":"http://test.yudao.iocoder.cn","bucket":"ruoyi-vue-pro","accessKey":"...","accessSecret":"..."} - enable:1
章节来源
文件内容表(file_content)可选存在性
- 当采用数据库存储时,文件内容可能存放在 infra_file_content.content 中
- 字段:config_id、path、content、creator/updater/create_time/update_time/deleted
- 适用场景:小文件集中存储、审计需求、统一备份
章节来源
上传流程(后端上传与App直传)
-
后端上传(FileController)
- 接收 multipart 文件,读取原始文件名与二进制内容
- 调用服务层创建文件,写入存储并持久化元数据
- 返回文件URL
-
App直传(AppFileController)
- 接收 multipart 文件,调用服务层创建文件
- 写入存储并持久化元数据,返回URL
-
分片上传初始化(FilePartUploadServiceImpl)
- 选择配置(指定或主配置)
- 调用文件客户端初始化分片上传,生成临时key与上传ID
- 保存分片任务元数据,返回给前端
图表来源
章节来源