Skip to content

附件管理

模块集成

依赖

xml
<dependency>
    <groupId>com.wkclz.micro</groupId>
    <artifactId>micro-file</artifactId>
    <version>${latest.version}</version>
</dependency>

表结构

sql
CREATE TABLE `mdm_fs_bucket` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `tenant_code` varchar(31) NOT NULL DEFAULT 'default' COMMENT '租户编码',
  `bucket` varchar(31) DEFAULT NULL COMMENT 'Bucket',
  `oss_sp` varchar(31) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'OSS服务商',
  `endpoint_inner` varchar(127) DEFAULT NULL COMMENT '内网Endpoint',
  `endpoint_outer` varchar(127) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '外网Endpoint',
  `region` varchar(31) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '区域',
  `access_key` varchar(127) DEFAULT NULL COMMENT 'Access Key',
  `secret_key` varchar(127) DEFAULT NULL COMMENT 'Secret Key',
  `default_flag` int DEFAULT '0' COMMENT '默认标识',
  `sort` int NOT NULL DEFAULT '0' COMMENT '排序',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `create_by` varchar(31) DEFAULT NULL COMMENT '创建人',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `update_by` varchar(31) DEFAULT NULL COMMENT '更新人',
  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
  `version` int NOT NULL DEFAULT '0' COMMENT '版本号',
  `status` bigint unsigned NOT NULL DEFAULT '1' COMMENT 'status',
  PRIMARY KEY (`id`) USING BTREE,
  KEY `tenant_code` (`tenant_code`) USING BTREE,
  KEY `bucket` (`bucket`) USING BTREE,
  KEY `access_key` (`access_key`) USING BTREE
) ENGINE=InnoDB COMMENT='Bucket管理';

CREATE TABLE `mdm_fs_files` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `tenant_code` varchar(31) NOT NULL DEFAULT 'default' COMMENT '租户编码',
  `busness_type` varchar(63) DEFAULT NULL COMMENT '业务类型',
  `file_size` bigint DEFAULT NULL COMMENT '文件大小',
  `file_name` varchar(255) DEFAULT '' COMMENT '文件名',
  `file_type` varchar(31) DEFAULT '' COMMENT '文件类型',
  `oss_sp` varchar(31) DEFAULT NULL COMMENT 'OSS服务商',
  `bucket` varchar(31) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Bucket',
  `file_id` varchar(255) DEFAULT '' COMMENT '文件ID/路径',
  `sort` int NOT NULL DEFAULT '0' COMMENT '排序',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `create_by` varchar(31) DEFAULT NULL COMMENT '创建人',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `update_by` varchar(31) DEFAULT NULL COMMENT '更新人',
  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
  `version` int NOT NULL DEFAULT '0' COMMENT '版本号',
  `status` bigint unsigned NOT NULL DEFAULT '1' COMMENT 'status',
  PRIMARY KEY (`id`) USING BTREE,
  KEY `tenant_code` (`tenant_code`) USING BTREE,
  KEY `busness_type` (`busness_type`) USING BTREE,
  KEY `file_name` (`file_name`) USING BTREE,
  KEY `bucket` (`bucket`),
  KEY `file_id` (`file_id`)
) ENGINE=InnoDB COMMENT='附件';

界面

使用案例

java
@Slf4j
@Component
public class FileDemo {

  @Autowired
  private FsApi fsApi;
  public void test() {
    /**
     * 上传
     */
    MdmFsFilesDto result;
    // 上传到默认分类
    result = fsApi.upload(file);
    // 上传到 businessType 分类
    result = fsApi.upload(file, businessType);
    // 上传到公共读(慎重,不受保护)
    result = fsApi.uploadPublic(file);


    /**
     * 签名下载
     */
    // 单个签名(支持逗号分隔多个图片)
    entity.setImage(fsApi.sign(dto.getImage()));
    // 单个签名(支持逗号分隔多个图片)
    fsApi.sign(dto, Entity::getImage, Entity::setImage);
    // 批量签名(能批量就不要用单个)
    fsApi.sign(list, Entity::getImage, Entity::setImage);
    // 签名文本中出现的所有附件
    fsApi.signContent(content);

    /**
     * 删除
     */
    // 删除单个
    fsApi.delete(fileId);
    // 删除批量
    fsApi.delete(fileIds);
  }
}

功能使用

  • Bucket 管理
    • 存储方案:支持 ALI_OSS, AWS_S3, MINIO 对象存储方案
    • Bucket:多个 Bucket 场景,有且仅有一个 Bucket 为默认。上传时不指定,即上传到默认Bucket
    • 内网Endpoint:用于上传。若云服务与对象存储均处于同一局域网,此时将获得最快速的网络优势。
    • 外网Endpoint:用于访问附件。网络效率可能比较低,但网络可达范围将大增。
    • 分类:上传时,可指定 Bucket 方式做存储隔离分类,也可以指定 businessType 方式做业务属性分类
    • 公开附件:上传时若指定了附件为公开属性,上传时会给文件路径添加 public/ 开头,此时文件无需签名即可被公网访问
  • API
    • 文件操作:注入 FsApi
    • 上传:可指定是否公开,可指定业务类型,可指定 bucket 若均不指定,将是 默认 bucket, 不公开, default 分组
    • 上传返回:上传后,请将 fileId 存储到业务表,请将 previewUrl 用于预览。previewUrl 有效期为10分钟,过期请重新签名。
    • 访问:将 fileId 经过 签名处理,将获得临时可访问的 url。可单个操作,和批量操作,可指定过期时间。默认访问过期时间为 10 分钟。多个 fileId 请走批量方式。
    • 删除:调用 delete 方法,即可将对象存储内的文件删除,同时也会将本地记录删除,删除的文件将永远无法恢复。使用删除时请自行检查 fileId 的关联性

Released under the MIT License.