Skip to content

micro-fileos 功能集成文档

1. Maven 依赖引入

在主应用的 pom.xml 中添加以下依赖:

xml
<dependency>
    <groupId>com.wkclz.microapp</groupId>
    <artifactId>micro-fileos</artifactId>
</dependency>

模块引入后,FileosAutoConfig 会通过 Spring Boot 自动配置机制自动扫描组件和 Mapper,无需手动配置。


2. 数据库表结构

2.1 mdm_fileos_bucket — Bucket 配置表

sql
CREATE TABLE `mdm_fileos_bucket` (
  `id`              bigint       NOT NULL AUTO_INCREMENT COMMENT '主键',
  `tenant_code`     varchar(63)  DEFAULT NULL COMMENT '租户编码',
  `bucket_name`     varchar(127) NOT NULL COMMENT 'Bucket名称',
  `oss_sp`          varchar(31)  NOT NULL COMMENT 'OSS服务商(ALI_OSS/AWS_S3/S3_COMPATIBLE)',
  `endpoint_inner`  varchar(255) DEFAULT NULL COMMENT '内网Endpoint',
  `endpoint_outer`  varchar(255) DEFAULT NULL COMMENT '外网Endpoint',
  `region`          varchar(63)  DEFAULT NULL COMMENT '区域',
  `access_key`      varchar(255) NOT NULL COMMENT 'Access Key',
  `secret_key`      varchar(255) NOT NULL COMMENT 'Secret Key',
  `default_flag`    int          DEFAULT 0  COMMENT '默认标识(1=默认Bucket)',
  `sort`            int          DEFAULT 0  COMMENT '排序',
  `create_time`     datetime     DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `create_by`       varchar(31)  DEFAULT NULL COMMENT '创建人',
  `update_time`     datetime     DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  `update_by`       varchar(31)  DEFAULT NULL COMMENT '修改人',
  `remark`          varchar(255) DEFAULT NULL COMMENT '备注',
  `version`         int          DEFAULT 0  COMMENT '乐观锁',
  `deleted`         varchar(24)  DEFAULT '0' COMMENT '逻辑删除(0=未删除)',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_bucket_name` (`bucket_name`, `tenant_code`, `deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='文件存储Bucket配置';

2.2 mdm_fileos_record — 文件记录表

sql
CREATE TABLE `mdm_fileos_record` (
  `id`             bigint        NOT NULL AUTO_INCREMENT COMMENT '主键',
  `tenant_code`    varchar(63)   DEFAULT NULL COMMENT '租户编码',
  `file_id`        varchar(511)  NOT NULL COMMENT '文件存储路径',
  `file_name`      varchar(255)  DEFAULT NULL COMMENT '原始文件名',
  `file_type`      varchar(31)   DEFAULT NULL COMMENT '文件扩展名',
  `file_size`      bigint        DEFAULT NULL COMMENT '文件大小(字节)',
  `file_hash`      varchar(127)  DEFAULT NULL COMMENT '文件Hash',
  `content_type`   varchar(127)  DEFAULT NULL COMMENT 'MIME类型',
  `category`       varchar(63)   DEFAULT NULL COMMENT '业务分类',
  `dir_path`       varchar(511)  DEFAULT NULL COMMENT '所属目录路径',
  `is_public`      int           DEFAULT 0  COMMENT '是否公共读(0=私有,1=公开)',
  `oss_sp`         varchar(31)   DEFAULT NULL COMMENT 'OSS服务商',
  `bucket_name`    varchar(127)  DEFAULT NULL COMMENT '所属Bucket',
  `upload_type`    varchar(31)   DEFAULT NULL COMMENT '上传方式(SIMPLE/MULTIPART/PRESIGN)',
  `upload_id`      varchar(127)  DEFAULT NULL COMMENT '分片上传ID',
  `upload_status`  varchar(31)   DEFAULT NULL COMMENT '上传状态(UPLOADING/COMPLETED/ABORTED)',
  `image_process`  varchar(1023) DEFAULT NULL COMMENT '图片处理参数(JSON)',
  `sort`           int           DEFAULT 0  COMMENT '排序',
  `create_time`    datetime      DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `create_by`      varchar(31)   DEFAULT NULL COMMENT '创建人',
  `update_time`    datetime      DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  `update_by`      varchar(31)   DEFAULT NULL COMMENT '修改人',
  `remark`         varchar(255)  DEFAULT NULL COMMENT '备注',
  `version`        int           DEFAULT 0  COMMENT '乐观锁',
  `deleted`        varchar(24)   DEFAULT '0' COMMENT '逻辑删除(0=未删除)',
  PRIMARY KEY (`id`),
  KEY `idx_file_id` (`file_id`(255)),
  KEY `idx_category` (`category`),
  KEY `idx_file_hash` (`file_hash`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='文件存储记录';

2.3 mdm_fileos_directory — 目录表

sql
CREATE TABLE `mdm_fileos_directory` (
  `id`           bigint       NOT NULL AUTO_INCREMENT COMMENT '主键',
  `tenant_code`  varchar(63)  DEFAULT NULL COMMENT '租户编码',
  `bucket_name`  varchar(127) DEFAULT NULL COMMENT '所属Bucket',
  `dir_path`     varchar(511) NOT NULL COMMENT '目录完整路径',
  `dir_name`     varchar(127) DEFAULT NULL COMMENT '目录名',
  `parent_path`  varchar(511) DEFAULT NULL COMMENT '父目录路径',
  `dir_level`    int          DEFAULT NULL COMMENT '目录层级',
  `file_count`   bigint       DEFAULT 0  COMMENT '文件数量',
  `total_size`   bigint       DEFAULT 0  COMMENT '文件总大小(字节)',
  `sort`         int          DEFAULT 0  COMMENT '排序',
  `create_time`  datetime     DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `create_by`    varchar(31)  DEFAULT NULL COMMENT '创建人',
  `update_time`  datetime     DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  `update_by`    varchar(31)  DEFAULT NULL COMMENT '修改人',
  `remark`       varchar(255) DEFAULT NULL COMMENT '备注',
  `version`      int          DEFAULT 0  COMMENT '乐观锁',
  `deleted`      varchar(24)  DEFAULT '0' COMMENT '逻辑删除(0=未删除)',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_bucket_dirpath` (`tenant_code`, `bucket_name`, `dir_path`(255)),
  KEY `idx_parent_path` (`parent_path`(255))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='文件目录';

2.4 mdm_fileos_multipart — 分片上传记录表

sql
CREATE TABLE `mdm_fileos_multipart` (
  `id`              bigint       NOT NULL AUTO_INCREMENT COMMENT '主键',
  `tenant_code`     varchar(63)  DEFAULT NULL COMMENT '租户编码',
  `upload_id`       varchar(127) NOT NULL COMMENT '分片上传ID',
  `file_id`         varchar(511) NOT NULL COMMENT '文件存储路径',
  `file_name`       varchar(255) DEFAULT NULL COMMENT '原始文件名',
  `file_size`       bigint       DEFAULT NULL COMMENT '文件大小(字节)',
  `content_type`    varchar(127) DEFAULT NULL COMMENT 'MIME类型',
  `category`        varchar(63)  DEFAULT NULL COMMENT '业务分类',
  `is_public`       int          DEFAULT 0  COMMENT '是否公共读',
  `oss_sp`          varchar(31)  DEFAULT NULL COMMENT 'OSS服务商',
  `bucket_name`     varchar(127) DEFAULT NULL COMMENT '所属Bucket',
  `part_count`      int          DEFAULT NULL COMMENT '分片总数',
  `completed_parts` text         DEFAULT NULL COMMENT '已完成分片信息(JSON)',
  `status`          varchar(31)  DEFAULT 'UPLOADING' COMMENT '状态(UPLOADING/COMPLETED/ABORTED)',
  `expire_time`     datetime     DEFAULT NULL COMMENT '过期时间',
  `sort`            int          DEFAULT 0  COMMENT '排序',
  `create_time`     datetime     DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `create_by`       varchar(31)  DEFAULT NULL COMMENT '创建人',
  `update_time`     datetime     DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  `update_by`       varchar(31)  DEFAULT NULL COMMENT '修改人',
  `remark`          varchar(255) DEFAULT NULL COMMENT '备注',
  `version`         int          DEFAULT 0  COMMENT '乐观锁',
  `deleted`         varchar(24)  DEFAULT '0' COMMENT '逻辑删除(0=未删除)',
  PRIMARY KEY (`id`),
  KEY `idx_upload_id` (`upload_id`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='分片上传记录';

3. REST API 接口清单

所有接口前缀:/micro-fileos

3.1 Bucket 管理

#方法路径说明参数返回值
1GET/bucket/pageBucket 分页查询MdmFileosBucket 实体字段作为查询条件R<PageData<MdmFileosBucket>>
2GET/bucket/infoBucket 详情id (Long)R<MdmFileosBucket>
3POST/bucket/create创建 BucketMdmFileosBucket JSON BodyR<?>
4POST/bucket/update修改 BucketMdmFileosBucket JSON BodyR<?>
5POST/bucket/remove删除 BucketMdmFileosBucket JSON BodyR<?>
6GET/bucket/optionsBucket 选项列表MdmFileosBucket 实体字段作为查询条件R<List<MdmFileosBucket>>

3.2 目录管理

#方法路径说明参数返回值
7GET/directory/list目录列表parentPath (必填), bucketName (可选)R<List<MdmFileosDirectory>>
8GET/directory/tree目录树bucketName (可选)R<List<MdmFileosDirectoryDto>>
9GET/directory/info目录详情dirPath (必填), bucketName (可选)R<MdmFileosDirectory>

3.3 文件上传

#方法路径说明参数返回值
10POST/upload/simple简单上传file (MultipartFile), category (可选), bucketName (可选)R<MdmFileosRecordDto>
11POST/upload/simple/public公开上传file (MultipartFile), category (可选), bucketName (可选)R<MdmFileosRecordDto>
12POST/upload/multipart/init分片上传初始化MultipartUploadInitRequest JSON BodyR<MultipartUploadInitResponse>
13POST/upload/multipart/complete分片上传完成MultipartCompleteRequest JSON BodyR<MdmFileosRecordDto>
14POST/upload/multipart/abort分片上传中止uploadId, fileId, bucketName (可选), ossSp (可选)R<?>

3.4 文件下载

#方法路径说明参数返回值
15GET/download/{fileId}文件下载fileId (路径参数), 支持 Range 请求头断点续传文件流 (application/octet-stream)

3.5 预签名上传

#方法路径说明参数返回值
16POST/presign/upload预签名简单上传PresignUploadRequest JSON BodyR<PresignUploadResponse>
17POST/presign/upload/batch预签名批量简单上传List<PresignUploadRequest> JSON BodyR<List<PresignUploadResponse>>
18POST/presign/multipart/init预签名分片上传初始化MultipartUploadInitRequest JSON BodyR<MultipartUploadInitResponse>
19POST/presign/multipart/complete预签名分片上传完成MultipartCompleteRequest JSON BodyR<MdmFileosRecordDto>
20POST/presign/multipart/abort预签名分片上传中止uploadId, fileId, bucketName (可选), ossSp (可选)R<?>
21POST/presign/complete预签名简单上传完成确认PresignCompleteRequest JSON BodyR<MdmFileosRecordDto>
22POST/presign/complete/batch预签名批量完成确认List<PresignCompleteRequest> JSON BodyR<List<MdmFileosRecordDto>>

3.6 签名 URL

#方法路径说明参数返回值
23GET/sign/url单文件签名fileId (必填), expireMinutes (可选)R<String>
24POST/sign/urls多文件签名List<String> JSON Body (fileId 列表)R<List<String>>

3.7 文件记录管理

#方法路径说明参数返回值
25GET/record/page文件记录分页MdmFileosRecord 实体字段作为查询条件R<PageData<MdmFileosRecord>>
26GET/record/info文件记录详情id (Long)R<MdmFileosRecord>
27POST/record/remove删除文件记录MdmFileosRecord JSON Body (含 id)R<?>

4. 初始化配置

4.1 Bucket 配置

通过 REST API 或直接插入数据库配置 Bucket:

bash
# 通过 API 创建 Bucket
curl -X POST http://localhost:8080/micro-fileos/bucket/create \
  -H 'Content-Type: application/json' \
  -d '{
    "bucketName": "my-bucket",
    "ossSp": "ALI_OSS",
    "endpointInner": "https://oss-cn-hangzhou-internal.aliyuncs.com",
    "endpointOuter": "https://oss-cn-hangzhou.aliyuncs.com",
    "region": "cn-hangzhou",
    "accessKey": "your-access-key",
    "secretKey": "your-secret-key",
    "defaultFlag": 1
  }'

4.2 application.yml 配置

yaml
sh:
  fileos:
    max-size-mb: 50                    # 全局最大文件大小(MB)
    image:
      max-size-mb: 10                  # 图片最大大小(MB)
      extension-names: jpg,jpeg,png,gif,webp,svg,bmp  # 图片扩展名
    video:
      max-size-mb: 500                 # 视频最大大小(MB)
      extension-names: mp4,mpeg,avi,mov,wmv,rm,rmvb,mkv,flv  # 视频扩展名
    presign:
      expire-minutes: 30               # 预签名URL过期时间(分钟)
      multipart:
        expire-minutes: 60             # 分片预签名URL过期时间(分钟)
        default-part-size-mb: 5        # 默认分片大小(MB)
    multipart:
      max-age-hours: 24                # 分片上传记录过期时间(小时)
    hash:
      enabled: true                    # 是否启用Hash去重
      algorithm: SHA-256               # Hash算法

5. 验证集成的方法

5.1 检查模块加载

启动应用后,检查控制台日志中是否包含以下信息:

FileosAutoConfig 配置已加载

5.2 验证 Bucket 接口

通过以下命令验证 Bucket 管理接口是否正常:

bash
# 查询 Bucket 选项列表
curl http://localhost:8080/micro-fileos/bucket/options

# 创建测试 Bucket
curl -X POST http://localhost:8080/micro-fileos/bucket/create \
  -H 'Content-Type: application/json' \
  -d '{
    "bucketName": "test-bucket",
    "ossSp": "ALI_OSS",
    "endpointInner": "https://oss-cn-hangzhou-internal.aliyuncs.com",
    "endpointOuter": "https://oss-cn-hangzhou.aliyuncs.com",
    "accessKey": "test-access-key",
    "secretKey": "test-secret-key",
    "defaultFlag": 1
  }'

5.3 验证文件上传接口

通过以下命令验证文件上传接口是否正常:

bash
# 简单上传测试
curl -X POST http://localhost:8080/micro-fileos/upload/simple \
  -F "file=@/path/to/test-file.txt" \
  -F "category=test"

5.4 验证目录管理接口

通过以下命令验证目录管理接口是否正常:

bash
# 查询目录树
curl http://localhost:8080/micro-fileos/directory/tree

# 查询子目录列表
curl "http://localhost:8080/micro-fileos/directory/list?parentPath=/"

5.5 验证预签名上传接口

bash
# 请求预签名 URL
curl -X POST http://localhost:8080/micro-fileos/presign/upload \
  -H 'Content-Type: application/json' \
  -d '{
    "fileName": "test.jpg",
    "fileSize": 1024,
    "contentType": "image/jpeg",
    "category": "test",
    "expireMinutes": 30
  }'

5.6 验证签名 URL 接口

bash
# 先上传文件获取 fileId,然后请求签名 URL
curl "http://localhost:8080/micro-fileos/sign/url?fileId=your-file-id&expireMinutes=60"

5.7 验证文件记录管理接口

bash
# 查询文件记录分页
curl "http://localhost:8080/micro-fileos/record/page?current=1&size=10"

# 查询文件记录详情
curl "http://localhost:8080/micro-fileos/record/info?id=1"

5.8 常见问题排查

  1. Bucket 无法创建:检查数据库连接是否正常,确认 mdm_fileos_bucket 表是否存在
  2. 上传失败:检查 OSS 配置是否正确,包括 accessKey、secretKey、endpoint 等
  3. 预签名 URL 生成失败:确认 Bucket 配置中的 OSS 服务商类型是否正确
  4. 文件下载失败:检查文件是否存在于 OSS,文件路径是否正确

Released under the MIT License.