Commit 77d634038c796215aeb531790068012bdf73b900

Authored by YunaiV
1 parent 067ff6cc

✨ 全局:简化 file 组件,融合到 infra 模块

Showing 45 changed files with 207 additions and 274 deletions
yudao-dependencies/pom.xml
@@ -567,11 +567,6 @@ @@ -567,11 +567,6 @@
567 <version>${okhttp3.version}</version> 567 <version>${okhttp3.version}</version>
568 </dependency> 568 </dependency>
569 <dependency> 569 <dependency>
570 - <groupId>cn.iocoder.boot</groupId>  
571 - <artifactId>yudao-spring-boot-starter-file</artifactId>  
572 - <version>${revision}</version>  
573 - </dependency>  
574 - <dependency>  
575 <groupId>io.minio</groupId> 570 <groupId>io.minio</groupId>
576 <artifactId>minio</artifactId> 571 <artifactId>minio</artifactId>
577 <version>${minio.version}</version> 572 <version>${minio.version}</version>
yudao-framework/pom.xml
@@ -16,7 +16,6 @@ @@ -16,7 +16,6 @@
16 <module>yudao-spring-boot-starter-web</module> 16 <module>yudao-spring-boot-starter-web</module>
17 <module>yudao-spring-boot-starter-security</module> 17 <module>yudao-spring-boot-starter-security</module>
18 18
19 - <module>yudao-spring-boot-starter-file</module>  
20 <module>yudao-spring-boot-starter-monitor</module> 19 <module>yudao-spring-boot-starter-monitor</module>
21 <module>yudao-spring-boot-starter-protection</module> 20 <module>yudao-spring-boot-starter-protection</module>
22 <module>yudao-spring-boot-starter-job</module> 21 <module>yudao-spring-boot-starter-job</module>
yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/json/JsonUtils.java
@@ -136,6 +136,21 @@ public class JsonUtils { @@ -136,6 +136,21 @@ public class JsonUtils {
136 } 136 }
137 } 137 }
138 138
  139 + /**
  140 + * 解析 JSON 字符串成指定类型的对象,如果解析失败,则返回 null
  141 + *
  142 + * @param text 字符串
  143 + * @param typeReference 类型引用
  144 + * @return 指定类型的对象
  145 + */
  146 + public static <T> T parseObjectQuietly(String text, TypeReference<T> typeReference) {
  147 + try {
  148 + return objectMapper.readValue(text, typeReference);
  149 + } catch (IOException e) {
  150 + return null;
  151 + }
  152 + }
  153 +
139 public static <T> List<T> parseArray(String text, Class<T> clazz) { 154 public static <T> List<T> parseArray(String text, Class<T> clazz) {
140 if (StrUtil.isEmpty(text)) { 155 if (StrUtil.isEmpty(text)) {
141 return new ArrayList<>(); 156 return new ArrayList<>();
yudao-framework/yudao-spring-boot-starter-file/pom.xml deleted
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<project xmlns="http://maven.apache.org/POM/4.0.0"  
3 - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
4 - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
5 - <parent>  
6 - <artifactId>yudao-framework</artifactId>  
7 - <groupId>cn.iocoder.boot</groupId>  
8 - <version>${revision}</version>  
9 - </parent>  
10 - <modelVersion>4.0.0</modelVersion>  
11 - <artifactId>yudao-spring-boot-starter-file</artifactId>  
12 -  
13 - <name>${project.artifactId}</name>  
14 - <description>文件客户端,支持多种存储器  
15 - 1. file:本地磁盘  
16 - 2. ftp:FTP 服务器  
17 - 2. sftp:SFTP 服务器  
18 - 4. db:数据库  
19 - 5. s3:支持 S3 协议的云存储服务,例如说 MinIO、阿里云、华为云、腾讯云、七牛云等等  
20 - </description>  
21 - <url>https://github.com/YunaiV/ruoyi-vue-pro</url>  
22 -  
23 - <dependencies>  
24 - <dependency>  
25 - <groupId>cn.iocoder.boot</groupId>  
26 - <artifactId>yudao-common</artifactId>  
27 - </dependency>  
28 -  
29 - <!-- Spring 核心 -->  
30 - <dependency>  
31 - <groupId>org.springframework.boot</groupId>  
32 - <artifactId>spring-boot-starter</artifactId>  
33 - </dependency>  
34 -  
35 - <!-- 工具类相关 -->  
36 - <dependency>  
37 - <groupId>org.springframework.boot</groupId>  
38 - <artifactId>spring-boot-starter-validation</artifactId>  
39 - </dependency>  
40 -  
41 - <dependency>  
42 - <groupId>org.slf4j</groupId>  
43 - <artifactId>slf4j-api</artifactId>  
44 - </dependency>  
45 -  
46 - <dependency>  
47 - <groupId>com.fasterxml.jackson.core</groupId>  
48 - <artifactId>jackson-databind</artifactId>  
49 - </dependency>  
50 - <dependency>  
51 - <groupId>com.fasterxml.jackson.core</groupId>  
52 - <artifactId>jackson-core</artifactId>  
53 - </dependency>  
54 -  
55 - <dependency>  
56 - <groupId>commons-net</groupId>  
57 - <artifactId>commons-net</artifactId> <!-- 解决 ftp 连接 -->  
58 - </dependency>  
59 - <dependency>  
60 - <groupId>com.jcraft</groupId>  
61 - <artifactId>jsch</artifactId> <!-- 解决 sftp 连接 -->  
62 - </dependency>  
63 -  
64 - <dependency>  
65 - <groupId>org.apache.tika</groupId>  
66 - <artifactId>tika-core</artifactId> <!-- 文件类型的识别 -->  
67 - </dependency>  
68 -  
69 - <!-- 三方云服务相关 -->  
70 - <dependency>  
71 - <groupId>io.minio</groupId>  
72 - <artifactId>minio</artifactId>  
73 - </dependency>  
74 -  
75 - <!-- Test 测试相关 -->  
76 - <dependency>  
77 - <groupId>cn.iocoder.boot</groupId>  
78 - <artifactId>yudao-spring-boot-starter-test</artifactId>  
79 - <scope>test</scope>  
80 - </dependency>  
81 - </dependencies>  
82 -  
83 -</project>  
yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/db/DBFileContentFrameworkDAO.java deleted
1 -package cn.iocoder.yudao.framework.file.core.client.db;  
2 -  
3 -/**  
4 - * 文件内容 Framework DAO 接口  
5 - *  
6 - * @author 芋道源码  
7 - */  
8 -public interface DBFileContentFrameworkDAO {  
9 -  
10 - /**  
11 - * 插入文件内容  
12 - *  
13 - * @param configId 配置编号  
14 - * @param path 路径  
15 - * @param content 内容  
16 - */  
17 - void insert(Long configId, String path, byte[] content);  
18 -  
19 - /**  
20 - * 删除文件内容  
21 - *  
22 - * @param configId 配置编号  
23 - * @param path 路径  
24 - */  
25 - void delete(Long configId, String path);  
26 -  
27 - /**  
28 - * 获得文件内容  
29 - *  
30 - * @param configId 配置编号  
31 - * @param path 路径  
32 - * @return 内容  
33 - */  
34 - byte[] selectContent(Long configId, String path);  
35 -  
36 -}  
yudao-framework/yudao-spring-boot-starter-file/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports deleted
1 -cn.iocoder.yudao.framework.file.config.YudaoFileAutoConfiguration  
2 \ No newline at end of file 0 \ No newline at end of file
yudao-framework/yudao-spring-boot-starter-file/src/test/java/cn/iocoder/yudao/framework/file/config/package-info.java deleted
1 -/**  
2 - * 占位,避免 package 无法提交到 Git 仓库  
3 - */  
4 -package cn.iocoder.yudao.framework.file.config;  
yudao-framework/yudao-spring-boot-starter-file/src/test/java/cn/iocoder/yudao/framework/file/core/enums/package-info.java deleted
1 -/**  
2 - * 占位,避免 package 无法提交到 Git 仓库  
3 - */  
4 -package cn.iocoder.yudao.framework.file.core.enums;  
yudao-framework/yudao-spring-boot-starter-file/src/test/resources/file/erweima.jpg deleted

18 KB

yudao-module-infra/yudao-module-infra-biz/pom.xml
@@ -117,8 +117,21 @@ @@ -117,8 +117,21 @@
117 117
118 <!-- 三方云服务相关 --> 118 <!-- 三方云服务相关 -->
119 <dependency> 119 <dependency>
120 - <groupId>cn.iocoder.boot</groupId>  
121 - <artifactId>yudao-spring-boot-starter-file</artifactId> 120 + <groupId>commons-net</groupId>
  121 + <artifactId>commons-net</artifactId> <!-- 文件客户端:解决 ftp 连接 -->
  122 + </dependency>
  123 + <dependency>
  124 + <groupId>com.jcraft</groupId>
  125 + <artifactId>jsch</artifactId> <!-- 文件客户端:解决 sftp 连接 -->
  126 + </dependency>
  127 + <dependency>
  128 + <groupId>io.minio</groupId>
  129 + <artifactId>minio</artifactId> <!-- 文件客户端:解决阿里云、腾讯云、minio 等 S3 连接 -->
  130 + </dependency>
  131 +
  132 + <dependency>
  133 + <groupId>org.apache.tika</groupId>
  134 + <artifactId>tika-core</artifactId> <!-- 文件客户端:文件类型的识别 -->
122 </dependency> 135 </dependency>
123 136
124 </dependencies> 137 </dependencies>
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/config/FileConfigRespVO.java
1 package cn.iocoder.yudao.module.infra.controller.admin.file.vo.config; 1 package cn.iocoder.yudao.module.infra.controller.admin.file.vo.config;
2 2
3 -import cn.iocoder.yudao.framework.file.core.client.FileClientConfig; 3 +import cn.iocoder.yudao.module.infra.framework.file.core.client.FileClientConfig;
4 import io.swagger.v3.oas.annotations.media.Schema; 4 import io.swagger.v3.oas.annotations.media.Schema;
5 import lombok.Data; 5 import lombok.Data;
6 6
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/file/FileConfigDO.java
1 package cn.iocoder.yudao.module.infra.dal.dataobject.file; 1 package cn.iocoder.yudao.module.infra.dal.dataobject.file;
2 2
3 -import cn.iocoder.yudao.framework.file.core.client.FileClientConfig;  
4 -import cn.iocoder.yudao.framework.file.core.enums.FileStorageEnum; 3 +import cn.hutool.core.util.StrUtil;
  4 +import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
5 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; 5 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
  6 +import cn.iocoder.yudao.module.infra.framework.file.core.client.FileClientConfig;
  7 +import cn.iocoder.yudao.module.infra.framework.file.core.client.db.DBFileClientConfig;
  8 +import cn.iocoder.yudao.module.infra.framework.file.core.client.ftp.FtpFileClientConfig;
  9 +import cn.iocoder.yudao.module.infra.framework.file.core.client.local.LocalFileClientConfig;
  10 +import cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig;
  11 +import cn.iocoder.yudao.module.infra.framework.file.core.client.sftp.SftpFileClientConfig;
  12 +import cn.iocoder.yudao.module.infra.framework.file.core.enums.FileStorageEnum;
6 import com.baomidou.mybatisplus.annotation.KeySequence; 13 import com.baomidou.mybatisplus.annotation.KeySequence;
7 import com.baomidou.mybatisplus.annotation.TableField; 14 import com.baomidou.mybatisplus.annotation.TableField;
8 import com.baomidou.mybatisplus.annotation.TableName; 15 import com.baomidou.mybatisplus.annotation.TableName;
9 -import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; 16 +import com.baomidou.mybatisplus.extension.handlers.AbstractJsonTypeHandler;
  17 +import com.fasterxml.jackson.core.type.TypeReference;
10 import lombok.*; 18 import lombok.*;
11 19
12 /** 20 /**
@@ -52,7 +60,42 @@ public class FileConfigDO extends BaseDO { @@ -52,7 +60,42 @@ public class FileConfigDO extends BaseDO {
52 /** 60 /**
53 * 支付渠道配置 61 * 支付渠道配置
54 */ 62 */
55 - @TableField(typeHandler = JacksonTypeHandler.class) 63 + @TableField(typeHandler = FileClientConfigTypeHandler.class)
56 private FileClientConfig config; 64 private FileClientConfig config;
57 65
  66 + public static class FileClientConfigTypeHandler extends AbstractJsonTypeHandler<Object> {
  67 +
  68 + @Override
  69 + protected Object parse(String json) {
  70 + FileClientConfig config = JsonUtils.parseObjectQuietly(json, new TypeReference<>() {});
  71 + if (config != null) {
  72 + return config;
  73 + }
  74 +
  75 + // 兼容老版本的包路径
  76 + String className = JsonUtils.parseObject(json, "@class", String.class);
  77 + className = StrUtil.subAfter(className, ".", true);
  78 + switch (className) {
  79 + case "DBFileClientConfig":
  80 + return JsonUtils.parseObject2(json, DBFileClientConfig.class);
  81 + case "FtpFileClientConfig":
  82 + return JsonUtils.parseObject2(json, FtpFileClientConfig.class);
  83 + case "LocalFileClientConfig":
  84 + return JsonUtils.parseObject2(json, LocalFileClientConfig.class);
  85 + case "SftpFileClientConfig":
  86 + return JsonUtils.parseObject2(json, SftpFileClientConfig.class);
  87 + case "S3FileClientConfig":
  88 + return JsonUtils.parseObject2(json, S3FileClientConfig.class);
  89 + default:
  90 + throw new IllegalArgumentException("未知的 FileClientConfig 类型:" + json);
  91 + }
  92 + }
  93 +
  94 + @Override
  95 + protected String toJson(Object obj) {
  96 + return JsonUtils.toJsonString(obj);
  97 + }
  98 +
  99 + }
  100 +
58 } 101 }
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/file/FileContentDO.java
1 package cn.iocoder.yudao.module.infra.dal.dataobject.file; 1 package cn.iocoder.yudao.module.infra.dal.dataobject.file;
2 2
3 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; 3 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
  4 +import cn.iocoder.yudao.module.infra.framework.file.core.client.db.DBFileClient;
4 import com.baomidou.mybatisplus.annotation.IdType; 5 import com.baomidou.mybatisplus.annotation.IdType;
5 import com.baomidou.mybatisplus.annotation.KeySequence; 6 import com.baomidou.mybatisplus.annotation.KeySequence;
6 import com.baomidou.mybatisplus.annotation.TableId; 7 import com.baomidou.mybatisplus.annotation.TableId;
@@ -10,7 +11,7 @@ import lombok.*; @@ -10,7 +11,7 @@ import lombok.*;
10 /** 11 /**
11 * 文件内容表 12 * 文件内容表
12 * 13 *
13 - * 专门用于存储 {@link cn.iocoder.yudao.framework.file.core.client.db.DBFileClient} 的文件内容 14 + * 专门用于存储 {@link DBFileClient} 的文件内容
14 * 15 *
15 * @author 芋道源码 16 * @author 芋道源码
16 */ 17 */
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/file/FileContentDAOImpl.java deleted
1 -package cn.iocoder.yudao.module.infra.dal.mysql.file;  
2 -  
3 -import cn.hutool.core.collection.CollUtil;  
4 -import cn.iocoder.yudao.framework.file.core.client.db.DBFileContentFrameworkDAO;  
5 -import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileContentDO;  
6 -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;  
7 -import org.springframework.stereotype.Repository;  
8 -  
9 -import jakarta.annotation.Resource;  
10 -import java.util.List;  
11 -import java.util.Optional;  
12 -  
13 -@Repository  
14 -public class FileContentDAOImpl implements DBFileContentFrameworkDAO {  
15 -  
16 - @Resource  
17 - private FileContentMapper fileContentMapper;  
18 -  
19 - @Override  
20 - public void insert(Long configId, String path, byte[] content) {  
21 - FileContentDO entity = new FileContentDO().setConfigId(configId)  
22 - .setPath(path).setContent(content);  
23 - fileContentMapper.insert(entity);  
24 - }  
25 -  
26 - @Override  
27 - public void delete(Long configId, String path) {  
28 - fileContentMapper.delete(buildQuery(configId, path));  
29 - }  
30 -  
31 - @Override  
32 - public byte[] selectContent(Long configId, String path) {  
33 - List<FileContentDO> list = fileContentMapper.selectList(  
34 - buildQuery(configId, path).select(FileContentDO::getContent).orderByDesc(FileContentDO::getId));  
35 - return Optional.ofNullable(CollUtil.getFirst(list))  
36 - .map(FileContentDO::getContent)  
37 - .orElse(null);  
38 - }  
39 -  
40 - private LambdaQueryWrapper<FileContentDO> buildQuery(Long configId, String path) {  
41 - return new LambdaQueryWrapper<FileContentDO>()  
42 - .eq(FileContentDO::getConfigId, configId)  
43 - .eq(FileContentDO::getPath, path);  
44 - }  
45 -  
46 -}  
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/file/FileContentMapper.java
1 package cn.iocoder.yudao.module.infra.dal.mysql.file; 1 package cn.iocoder.yudao.module.infra.dal.mysql.file;
2 2
3 import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileContentDO; 3 import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileContentDO;
  4 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
4 import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5 import org.apache.ibatis.annotations.Mapper; 6 import org.apache.ibatis.annotations.Mapper;
6 7
  8 +import java.util.List;
  9 +
7 @Mapper 10 @Mapper
8 public interface FileContentMapper extends BaseMapper<FileContentDO> { 11 public interface FileContentMapper extends BaseMapper<FileContentDO> {
  12 +
  13 + default void deleteByConfigIdAndPath(Long configId, String path) {
  14 + this.delete(new LambdaQueryWrapper<FileContentDO>()
  15 + .eq(FileContentDO::getConfigId, configId)
  16 + .eq(FileContentDO::getPath, path));
  17 + }
  18 +
  19 + default List<FileContentDO> selectListByConfigIdAndPath(Long configId, String path) {
  20 + return selectList(new LambdaQueryWrapper<FileContentDO>()
  21 + .eq(FileContentDO::getConfigId, configId)
  22 + .eq(FileContentDO::getPath, path));
  23 + }
  24 +
9 } 25 }
yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/config/YudaoFileAutoConfiguration.java renamed to yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/framework/file/config/YudaoFileAutoConfiguration.java
1 -package cn.iocoder.yudao.framework.file.config; 1 +package cn.iocoder.yudao.module.infra.framework.file.config;
2 2
3 -import cn.iocoder.yudao.framework.file.core.client.FileClientFactory;  
4 -import cn.iocoder.yudao.framework.file.core.client.FileClientFactoryImpl;  
5 -import org.springframework.boot.autoconfigure.AutoConfiguration; 3 +import cn.iocoder.yudao.module.infra.framework.file.core.client.FileClientFactory;
  4 +import cn.iocoder.yudao.module.infra.framework.file.core.client.FileClientFactoryImpl;
6 import org.springframework.context.annotation.Bean; 5 import org.springframework.context.annotation.Bean;
  6 +import org.springframework.context.annotation.Configuration;
7 7
8 /** 8 /**
9 * 文件配置类 9 * 文件配置类
10 * 10 *
11 * @author 芋道源码 11 * @author 芋道源码
12 */ 12 */
13 -@AutoConfiguration 13 +@Configuration(proxyBeanMethods = false)
14 public class YudaoFileAutoConfiguration { 14 public class YudaoFileAutoConfiguration {
15 15
16 @Bean 16 @Bean
yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/AbstractFileClient.java renamed to yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/client/AbstractFileClient.java
1 -package cn.iocoder.yudao.framework.file.core.client; 1 +package cn.iocoder.yudao.module.infra.framework.file.core.client;
2 2
3 import cn.hutool.core.util.StrUtil; 3 import cn.hutool.core.util.StrUtil;
4 import lombok.extern.slf4j.Slf4j; 4 import lombok.extern.slf4j.Slf4j;
yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/FileClient.java renamed to yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/client/FileClient.java
1 -package cn.iocoder.yudao.framework.file.core.client; 1 +package cn.iocoder.yudao.module.infra.framework.file.core.client;
2 2
3 -import cn.iocoder.yudao.framework.file.core.client.s3.FilePresignedUrlRespDTO; 3 +import cn.iocoder.yudao.module.infra.framework.file.core.client.s3.FilePresignedUrlRespDTO;
4 4
5 /** 5 /**
6 * 文件客户端 6 * 文件客户端
yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/FileClientConfig.java renamed to yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/client/FileClientConfig.java
1 -package cn.iocoder.yudao.framework.file.core.client; 1 +package cn.iocoder.yudao.module.infra.framework.file.core.client;
2 2
3 import com.fasterxml.jackson.annotation.JsonTypeInfo; 3 import com.fasterxml.jackson.annotation.JsonTypeInfo;
4 4
yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/FileClientFactory.java renamed to yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/client/FileClientFactory.java
1 -package cn.iocoder.yudao.framework.file.core.client; 1 +package cn.iocoder.yudao.module.infra.framework.file.core.client;
  2 +
  3 +import cn.iocoder.yudao.module.infra.framework.file.core.enums.FileStorageEnum;
2 4
3 public interface FileClientFactory { 5 public interface FileClientFactory {
4 6
@@ -14,7 +16,7 @@ public interface FileClientFactory { @@ -14,7 +16,7 @@ public interface FileClientFactory {
14 * 创建文件客户端 16 * 创建文件客户端
15 * 17 *
16 * @param configId 配置编号 18 * @param configId 配置编号
17 - * @param storage 存储器的枚举 {@link cn.iocoder.yudao.framework.file.core.enums.FileStorageEnum} 19 + * @param storage 存储器的枚举 {@link FileStorageEnum}
18 * @param config 文件配置 20 * @param config 文件配置
19 */ 21 */
20 <Config extends FileClientConfig> void createOrUpdateFileClient(Long configId, Integer storage, Config config); 22 <Config extends FileClientConfig> void createOrUpdateFileClient(Long configId, Integer storage, Config config);
yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/FileClientFactoryImpl.java renamed to yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/client/FileClientFactoryImpl.java
1 -package cn.iocoder.yudao.framework.file.core.client; 1 +package cn.iocoder.yudao.module.infra.framework.file.core.client;
2 2
3 import cn.hutool.core.lang.Assert; 3 import cn.hutool.core.lang.Assert;
4 import cn.hutool.core.util.ReflectUtil; 4 import cn.hutool.core.util.ReflectUtil;
5 -import cn.iocoder.yudao.framework.file.core.enums.FileStorageEnum; 5 +import cn.iocoder.yudao.module.infra.framework.file.core.enums.FileStorageEnum;
6 import lombok.extern.slf4j.Slf4j; 6 import lombok.extern.slf4j.Slf4j;
7 7
8 import java.util.concurrent.ConcurrentHashMap; 8 import java.util.concurrent.ConcurrentHashMap;
yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/db/DBFileClient.java renamed to yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/client/db/DBFileClient.java
1 -package cn.iocoder.yudao.framework.file.core.client.db; 1 +package cn.iocoder.yudao.module.infra.framework.file.core.client.db;
2 2
  3 +import cn.hutool.core.collection.CollUtil;
3 import cn.hutool.extra.spring.SpringUtil; 4 import cn.hutool.extra.spring.SpringUtil;
4 -import cn.iocoder.yudao.framework.file.core.client.AbstractFileClient; 5 +import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileContentDO;
  6 +import cn.iocoder.yudao.module.infra.dal.mysql.file.FileContentMapper;
  7 +import cn.iocoder.yudao.module.infra.framework.file.core.client.AbstractFileClient;
  8 +
  9 +import java.util.Comparator;
  10 +import java.util.List;
5 11
6 /** 12 /**
7 * 基于 DB 存储的文件客户端的配置类 13 * 基于 DB 存储的文件客户端的配置类
@@ -10,7 +16,7 @@ import cn.iocoder.yudao.framework.file.core.client.AbstractFileClient; @@ -10,7 +16,7 @@ import cn.iocoder.yudao.framework.file.core.client.AbstractFileClient;
10 */ 16 */
11 public class DBFileClient extends AbstractFileClient<DBFileClientConfig> { 17 public class DBFileClient extends AbstractFileClient<DBFileClientConfig> {
12 18
13 - private DBFileContentFrameworkDAO dao; 19 + private FileContentMapper fileContentMapper;
14 20
15 public DBFileClient(Long id, DBFileClientConfig config) { 21 public DBFileClient(Long id, DBFileClientConfig config) {
16 super(id, config); 22 super(id, config);
@@ -18,31 +24,32 @@ public class DBFileClient extends AbstractFileClient&lt;DBFileClientConfig&gt; { @@ -18,31 +24,32 @@ public class DBFileClient extends AbstractFileClient&lt;DBFileClientConfig&gt; {
18 24
19 @Override 25 @Override
20 protected void doInit() { 26 protected void doInit() {
  27 + fileContentMapper = SpringUtil.getBean(FileContentMapper.class);
21 } 28 }
22 29
23 @Override 30 @Override
24 public String upload(byte[] content, String path, String type) { 31 public String upload(byte[] content, String path, String type) {
25 - getDao().insert(getId(), path, content); 32 + FileContentDO contentDO = new FileContentDO().setConfigId(getId())
  33 + .setPath(path).setContent(content);
  34 + fileContentMapper.insert(contentDO);
26 // 拼接返回路径 35 // 拼接返回路径
27 return super.formatFileUrl(config.getDomain(), path); 36 return super.formatFileUrl(config.getDomain(), path);
28 } 37 }
29 38
30 @Override 39 @Override
31 public void delete(String path) { 40 public void delete(String path) {
32 - getDao().delete(getId(), path); 41 + fileContentMapper.deleteByConfigIdAndPath(getId(), path);
33 } 42 }
34 43
35 @Override 44 @Override
36 public byte[] getContent(String path) { 45 public byte[] getContent(String path) {
37 - return getDao().selectContent(getId(), path);  
38 - }  
39 -  
40 - private DBFileContentFrameworkDAO getDao() {  
41 - // 延迟获取,因为 SpringUtil 初始化太慢  
42 - if (dao == null) {  
43 - dao = SpringUtil.getBean(DBFileContentFrameworkDAO.class); 46 + List<FileContentDO> list = fileContentMapper.selectListByConfigIdAndPath(getId(), path);
  47 + if (CollUtil.isEmpty(list)) {
  48 + return null;
44 } 49 }
45 - return dao; 50 + // 排序后,拿 id 最大的,即最后上传的
  51 + list.sort(Comparator.comparing(FileContentDO::getId));
  52 + return CollUtil.getLast(list).getContent();
46 } 53 }
47 54
48 } 55 }
yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/db/DBFileClientConfig.java renamed to yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/client/db/DBFileClientConfig.java
1 -package cn.iocoder.yudao.framework.file.core.client.db; 1 +package cn.iocoder.yudao.module.infra.framework.file.core.client.db;
2 2
3 -import cn.iocoder.yudao.framework.file.core.client.FileClientConfig; 3 +import cn.iocoder.yudao.module.infra.framework.file.core.client.FileClientConfig;
4 import lombok.Data; 4 import lombok.Data;
5 import org.hibernate.validator.constraints.URL; 5 import org.hibernate.validator.constraints.URL;
6 6
yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/ftp/FtpFileClient.java renamed to yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/client/ftp/FtpFileClient.java
1 -package cn.iocoder.yudao.framework.file.core.client.ftp; 1 +package cn.iocoder.yudao.module.infra.framework.file.core.client.ftp;
2 2
3 import cn.hutool.core.io.FileUtil; 3 import cn.hutool.core.io.FileUtil;
4 import cn.hutool.core.util.CharsetUtil; 4 import cn.hutool.core.util.CharsetUtil;
@@ -6,7 +6,7 @@ import cn.hutool.core.util.StrUtil; @@ -6,7 +6,7 @@ import cn.hutool.core.util.StrUtil;
6 import cn.hutool.extra.ftp.Ftp; 6 import cn.hutool.extra.ftp.Ftp;
7 import cn.hutool.extra.ftp.FtpException; 7 import cn.hutool.extra.ftp.FtpException;
8 import cn.hutool.extra.ftp.FtpMode; 8 import cn.hutool.extra.ftp.FtpMode;
9 -import cn.iocoder.yudao.framework.file.core.client.AbstractFileClient; 9 +import cn.iocoder.yudao.module.infra.framework.file.core.client.AbstractFileClient;
10 10
11 import java.io.ByteArrayInputStream; 11 import java.io.ByteArrayInputStream;
12 import java.io.ByteArrayOutputStream; 12 import java.io.ByteArrayOutputStream;
yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/ftp/FtpFileClientConfig.java renamed to yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/client/ftp/FtpFileClientConfig.java
1 -package cn.iocoder.yudao.framework.file.core.client.ftp; 1 +package cn.iocoder.yudao.module.infra.framework.file.core.client.ftp;
2 2
3 -import cn.iocoder.yudao.framework.file.core.client.FileClientConfig; 3 +import cn.iocoder.yudao.module.infra.framework.file.core.client.FileClientConfig;
4 import lombok.Data; 4 import lombok.Data;
5 import org.hibernate.validator.constraints.URL; 5 import org.hibernate.validator.constraints.URL;
6 6
yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/local/LocalFileClient.java renamed to yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/client/local/LocalFileClient.java
1 -package cn.iocoder.yudao.framework.file.core.client.local; 1 +package cn.iocoder.yudao.module.infra.framework.file.core.client.local;
2 2
3 import cn.hutool.core.io.FileUtil; 3 import cn.hutool.core.io.FileUtil;
4 -import cn.iocoder.yudao.framework.file.core.client.AbstractFileClient; 4 +import cn.iocoder.yudao.module.infra.framework.file.core.client.AbstractFileClient;
5 5
6 import java.io.File; 6 import java.io.File;
7 7
yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/local/LocalFileClientConfig.java renamed to yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/client/local/LocalFileClientConfig.java
1 -package cn.iocoder.yudao.framework.file.core.client.local; 1 +package cn.iocoder.yudao.module.infra.framework.file.core.client.local;
2 2
3 -import cn.iocoder.yudao.framework.file.core.client.FileClientConfig; 3 +import cn.iocoder.yudao.module.infra.framework.file.core.client.FileClientConfig;
4 import lombok.Data; 4 import lombok.Data;
5 import org.hibernate.validator.constraints.URL; 5 import org.hibernate.validator.constraints.URL;
6 6
yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/s3/FilePresignedUrlRespDTO.java renamed to yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/client/s3/FilePresignedUrlRespDTO.java
1 -package cn.iocoder.yudao.framework.file.core.client.s3; 1 +package cn.iocoder.yudao.module.infra.framework.file.core.client.s3;
2 2
3 import lombok.AllArgsConstructor; 3 import lombok.AllArgsConstructor;
4 import lombok.Data; 4 import lombok.Data;
yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/s3/S3FileClient.java renamed to yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/client/s3/S3FileClient.java
1 -package cn.iocoder.yudao.framework.file.core.client.s3; 1 +package cn.iocoder.yudao.module.infra.framework.file.core.client.s3;
2 2
3 import cn.hutool.core.io.IoUtil; 3 import cn.hutool.core.io.IoUtil;
4 import cn.hutool.core.util.StrUtil; 4 import cn.hutool.core.util.StrUtil;
5 import cn.hutool.http.HttpUtil; 5 import cn.hutool.http.HttpUtil;
6 -import cn.iocoder.yudao.framework.file.core.client.AbstractFileClient; 6 +import cn.iocoder.yudao.module.infra.framework.file.core.client.AbstractFileClient;
7 import io.minio.*; 7 import io.minio.*;
8 import io.minio.http.Method; 8 import io.minio.http.Method;
9 9
10 import java.io.ByteArrayInputStream; 10 import java.io.ByteArrayInputStream;
11 import java.util.concurrent.TimeUnit; 11 import java.util.concurrent.TimeUnit;
12 12
13 -import static cn.iocoder.yudao.framework.file.core.client.s3.S3FileClientConfig.ENDPOINT_ALIYUN;  
14 -import static cn.iocoder.yudao.framework.file.core.client.s3.S3FileClientConfig.ENDPOINT_TENCENT;  
15 -  
16 /** 13 /**
17 * 基于 S3 协议的文件客户端,实现 MinIO、阿里云、腾讯云、七牛云、华为云等云服务 14 * 基于 S3 协议的文件客户端,实现 MinIO、阿里云、腾讯云、七牛云、华为云等云服务
18 * <p> 15 * <p>
@@ -76,15 +73,15 @@ public class S3FileClient extends AbstractFileClient&lt;S3FileClientConfig&gt; { @@ -76,15 +73,15 @@ public class S3FileClient extends AbstractFileClient&lt;S3FileClientConfig&gt; {
76 */ 73 */
77 private String buildRegion() { 74 private String buildRegion() {
78 // 阿里云必须有 region,否则会报错 75 // 阿里云必须有 region,否则会报错
79 - if (config.getEndpoint().contains(ENDPOINT_ALIYUN)) { 76 + if (config.getEndpoint().contains(S3FileClientConfig.ENDPOINT_ALIYUN)) {
80 return StrUtil.subBefore(config.getEndpoint(), '.', false) 77 return StrUtil.subBefore(config.getEndpoint(), '.', false)
81 .replaceAll("-internal", "")// 去除内网 Endpoint 的后缀 78 .replaceAll("-internal", "")// 去除内网 Endpoint 的后缀
82 .replaceAll("https://", ""); 79 .replaceAll("https://", "");
83 } 80 }
84 // 腾讯云必须有 region,否则会报错 81 // 腾讯云必须有 region,否则会报错
85 - if (config.getEndpoint().contains(ENDPOINT_TENCENT)) { 82 + if (config.getEndpoint().contains(S3FileClientConfig.ENDPOINT_TENCENT)) {
86 return StrUtil.subAfter(config.getEndpoint(), "cos.", false) 83 return StrUtil.subAfter(config.getEndpoint(), "cos.", false)
87 - .replaceAll("." + ENDPOINT_TENCENT, ""); // 去除 Endpoint 84 + .replaceAll("." + S3FileClientConfig.ENDPOINT_TENCENT, ""); // 去除 Endpoint
88 } 85 }
89 return null; 86 return null;
90 } 87 }
yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/s3/S3FileClientConfig.java renamed to yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/client/s3/S3FileClientConfig.java
1 -package cn.iocoder.yudao.framework.file.core.client.s3; 1 +package cn.iocoder.yudao.module.infra.framework.file.core.client.s3;
2 2
3 import cn.hutool.core.util.StrUtil; 3 import cn.hutool.core.util.StrUtil;
4 -import cn.iocoder.yudao.framework.file.core.client.FileClientConfig; 4 +import cn.iocoder.yudao.module.infra.framework.file.core.client.FileClientConfig;
5 import com.fasterxml.jackson.annotation.JsonIgnore; 5 import com.fasterxml.jackson.annotation.JsonIgnore;
6 import lombok.Data; 6 import lombok.Data;
7 import org.hibernate.validator.constraints.URL; 7 import org.hibernate.validator.constraints.URL;
yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/sftp/SftpFileClient.java renamed to yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/client/sftp/SftpFileClient.java
1 -package cn.iocoder.yudao.framework.file.core.client.sftp; 1 +package cn.iocoder.yudao.module.infra.framework.file.core.client.sftp;
2 2
3 import cn.hutool.core.io.FileUtil; 3 import cn.hutool.core.io.FileUtil;
4 import cn.hutool.extra.ssh.Sftp; 4 import cn.hutool.extra.ssh.Sftp;
5 import cn.iocoder.yudao.framework.common.util.io.FileUtils; 5 import cn.iocoder.yudao.framework.common.util.io.FileUtils;
6 -import cn.iocoder.yudao.framework.file.core.client.AbstractFileClient; 6 +import cn.iocoder.yudao.module.infra.framework.file.core.client.AbstractFileClient;
7 7
8 import java.io.File; 8 import java.io.File;
9 9
yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/sftp/SftpFileClientConfig.java renamed to yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/client/sftp/SftpFileClientConfig.java
1 -package cn.iocoder.yudao.framework.file.core.client.sftp; 1 +package cn.iocoder.yudao.module.infra.framework.file.core.client.sftp;
2 2
3 -import cn.iocoder.yudao.framework.file.core.client.FileClientConfig; 3 +import cn.iocoder.yudao.module.infra.framework.file.core.client.FileClientConfig;
4 import lombok.Data; 4 import lombok.Data;
5 import org.hibernate.validator.constraints.URL; 5 import org.hibernate.validator.constraints.URL;
6 6
yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/enums/FileStorageEnum.java renamed to yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/enums/FileStorageEnum.java
1 -package cn.iocoder.yudao.framework.file.core.enums; 1 +package cn.iocoder.yudao.module.infra.framework.file.core.enums;
2 2
3 import cn.hutool.core.util.ArrayUtil; 3 import cn.hutool.core.util.ArrayUtil;
4 -import cn.iocoder.yudao.framework.file.core.client.FileClient;  
5 -import cn.iocoder.yudao.framework.file.core.client.FileClientConfig;  
6 -import cn.iocoder.yudao.framework.file.core.client.db.DBFileClient;  
7 -import cn.iocoder.yudao.framework.file.core.client.db.DBFileClientConfig;  
8 -import cn.iocoder.yudao.framework.file.core.client.ftp.FtpFileClient;  
9 -import cn.iocoder.yudao.framework.file.core.client.ftp.FtpFileClientConfig;  
10 -import cn.iocoder.yudao.framework.file.core.client.local.LocalFileClient;  
11 -import cn.iocoder.yudao.framework.file.core.client.local.LocalFileClientConfig;  
12 -import cn.iocoder.yudao.framework.file.core.client.s3.S3FileClient;  
13 -import cn.iocoder.yudao.framework.file.core.client.s3.S3FileClientConfig;  
14 -import cn.iocoder.yudao.framework.file.core.client.sftp.SftpFileClient;  
15 -import cn.iocoder.yudao.framework.file.core.client.sftp.SftpFileClientConfig; 4 +import cn.iocoder.yudao.module.infra.framework.file.core.client.FileClient;
  5 +import cn.iocoder.yudao.module.infra.framework.file.core.client.FileClientConfig;
  6 +import cn.iocoder.yudao.module.infra.framework.file.core.client.db.DBFileClient;
  7 +import cn.iocoder.yudao.module.infra.framework.file.core.client.db.DBFileClientConfig;
  8 +import cn.iocoder.yudao.module.infra.framework.file.core.client.ftp.FtpFileClient;
  9 +import cn.iocoder.yudao.module.infra.framework.file.core.client.ftp.FtpFileClientConfig;
  10 +import cn.iocoder.yudao.module.infra.framework.file.core.client.local.LocalFileClient;
  11 +import cn.iocoder.yudao.module.infra.framework.file.core.client.local.LocalFileClientConfig;
  12 +import cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClient;
  13 +import cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig;
  14 +import cn.iocoder.yudao.module.infra.framework.file.core.client.sftp.SftpFileClient;
  15 +import cn.iocoder.yudao.module.infra.framework.file.core.client.sftp.SftpFileClientConfig;
16 import lombok.AllArgsConstructor; 16 import lombok.AllArgsConstructor;
17 import lombok.Getter; 17 import lombok.Getter;
18 18
yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/utils/FileTypeUtils.java renamed to yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/utils/FileTypeUtils.java
1 -package cn.iocoder.yudao.framework.file.core.utils; 1 +package cn.iocoder.yudao.module.infra.framework.file.core.utils;
2 2
3 import com.alibaba.ttl.TransmittableThreadLocal; 3 import com.alibaba.ttl.TransmittableThreadLocal;
4 import lombok.SneakyThrows; 4 import lombok.SneakyThrows;
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/framework/file/package-info.java 0 → 100644
  1 +/**
  2 + * 文件客户端,支持多种存储器
  3 + *
  4 + * 1. local:本地磁盘
  5 + * 2. ftp:FTP 服务器
  6 + * 3. sftp:SFTP 服务器
  7 + * 4. db:数据库
  8 + * 5. s3:支持 S3 协议的云存储服务,例如说 MinIO、阿里云、华为云、腾讯云、七牛云等等
  9 + *
  10 + * @author 芋道源码
  11 + */
  12 +package cn.iocoder.yudao.module.infra.framework.file;
0 \ No newline at end of file 13 \ No newline at end of file
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileConfigService.java
1 package cn.iocoder.yudao.module.infra.service.file; 1 package cn.iocoder.yudao.module.infra.service.file;
2 2
3 import cn.iocoder.yudao.framework.common.pojo.PageResult; 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 -import cn.iocoder.yudao.framework.file.core.client.FileClient; 4 +import cn.iocoder.yudao.module.infra.framework.file.core.client.FileClient;
5 import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigPageReqVO; 5 import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigPageReqVO;
6 import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigSaveReqVO; 6 import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigSaveReqVO;
7 import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileConfigDO; 7 import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileConfigDO;
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileConfigServiceImpl.java
@@ -5,10 +5,10 @@ import cn.hutool.core.util.IdUtil; @@ -5,10 +5,10 @@ import cn.hutool.core.util.IdUtil;
5 import cn.iocoder.yudao.framework.common.pojo.PageResult; 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
6 import cn.iocoder.yudao.framework.common.util.json.JsonUtils; 6 import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
7 import cn.iocoder.yudao.framework.common.util.validation.ValidationUtils; 7 import cn.iocoder.yudao.framework.common.util.validation.ValidationUtils;
8 -import cn.iocoder.yudao.framework.file.core.client.FileClient;  
9 -import cn.iocoder.yudao.framework.file.core.client.FileClientConfig;  
10 -import cn.iocoder.yudao.framework.file.core.client.FileClientFactory;  
11 -import cn.iocoder.yudao.framework.file.core.enums.FileStorageEnum; 8 +import cn.iocoder.yudao.module.infra.framework.file.core.client.FileClient;
  9 +import cn.iocoder.yudao.module.infra.framework.file.core.client.FileClientConfig;
  10 +import cn.iocoder.yudao.module.infra.framework.file.core.client.FileClientFactory;
  11 +import cn.iocoder.yudao.module.infra.framework.file.core.enums.FileStorageEnum;
12 import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigPageReqVO; 12 import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigPageReqVO;
13 import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigSaveReqVO; 13 import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigSaveReqVO;
14 import cn.iocoder.yudao.module.infra.convert.file.FileConfigConvert; 14 import cn.iocoder.yudao.module.infra.convert.file.FileConfigConvert;
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileServiceImpl.java
@@ -5,9 +5,9 @@ import cn.hutool.core.util.StrUtil; @@ -5,9 +5,9 @@ import cn.hutool.core.util.StrUtil;
5 import cn.iocoder.yudao.framework.common.pojo.PageResult; 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
6 import cn.iocoder.yudao.framework.common.util.io.FileUtils; 6 import cn.iocoder.yudao.framework.common.util.io.FileUtils;
7 import cn.iocoder.yudao.framework.common.util.object.BeanUtils; 7 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
8 -import cn.iocoder.yudao.framework.file.core.client.FileClient;  
9 -import cn.iocoder.yudao.framework.file.core.client.s3.FilePresignedUrlRespDTO;  
10 -import cn.iocoder.yudao.framework.file.core.utils.FileTypeUtils; 8 +import cn.iocoder.yudao.module.infra.framework.file.core.client.FileClient;
  9 +import cn.iocoder.yudao.module.infra.framework.file.core.client.s3.FilePresignedUrlRespDTO;
  10 +import cn.iocoder.yudao.module.infra.framework.file.core.utils.FileTypeUtils;
11 import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.FileCreateReqVO; 11 import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.FileCreateReqVO;
12 import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.FilePageReqVO; 12 import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.FilePageReqVO;
13 import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.FilePresignedUrlRespVO; 13 import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.FilePresignedUrlRespVO;
yudao-module-infra/yudao-module-infra-biz/src/main/resources/file/erweima.jpg
1 Binary files a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/file/erweima.jpg and b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/file/erweima.jpg differ 1 Binary files a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/file/erweima.jpg and b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/file/erweima.jpg differ
yudao-framework/yudao-spring-boot-starter-file/src/test/java/cn/iocoder/yudao/framework/file/core/client/ftp/FtpFileClientTest.java renamed to yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/framework/file/core/ftp/FtpFileClientTest.java
1 -package cn.iocoder.yudao.framework.file.core.client.ftp; 1 +package cn.iocoder.yudao.module.infra.framework.file.core.ftp;
2 2
3 import cn.hutool.core.io.resource.ResourceUtil; 3 import cn.hutool.core.io.resource.ResourceUtil;
4 import cn.hutool.core.util.IdUtil; 4 import cn.hutool.core.util.IdUtil;
5 import cn.hutool.extra.ftp.FtpMode; 5 import cn.hutool.extra.ftp.FtpMode;
  6 +import cn.iocoder.yudao.module.infra.framework.file.core.client.ftp.FtpFileClient;
  7 +import cn.iocoder.yudao.module.infra.framework.file.core.client.ftp.FtpFileClientConfig;
6 import org.junit.jupiter.api.Disabled; 8 import org.junit.jupiter.api.Disabled;
7 import org.junit.jupiter.api.Test; 9 import org.junit.jupiter.api.Test;
8 10
yudao-framework/yudao-spring-boot-starter-file/src/test/java/cn/iocoder/yudao/framework/file/core/client/local/LocalFileClientTest.java renamed to yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/framework/file/core/local/LocalFileClientTest.java
1 -package cn.iocoder.yudao.framework.file.core.client.local; 1 +package cn.iocoder.yudao.module.infra.framework.file.core.local;
2 2
3 import cn.hutool.core.io.resource.ResourceUtil; 3 import cn.hutool.core.io.resource.ResourceUtil;
4 import cn.hutool.core.util.IdUtil; 4 import cn.hutool.core.util.IdUtil;
  5 +import cn.iocoder.yudao.module.infra.framework.file.core.client.local.LocalFileClient;
  6 +import cn.iocoder.yudao.module.infra.framework.file.core.client.local.LocalFileClientConfig;
5 import org.junit.jupiter.api.Disabled; 7 import org.junit.jupiter.api.Disabled;
6 import org.junit.jupiter.api.Test; 8 import org.junit.jupiter.api.Test;
7 9
yudao-framework/yudao-spring-boot-starter-file/src/test/java/cn/iocoder/yudao/framework/file/core/client/s3/S3FileClientTest.java renamed to yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/framework/file/core/s3/S3FileClientTest.java
1 -package cn.iocoder.yudao.framework.file.core.client.s3; 1 +package cn.iocoder.yudao.module.infra.framework.file.core.s3;
2 2
3 import cn.hutool.core.io.resource.ResourceUtil; 3 import cn.hutool.core.io.resource.ResourceUtil;
4 import cn.hutool.core.util.IdUtil; 4 import cn.hutool.core.util.IdUtil;
5 import cn.iocoder.yudao.framework.common.util.validation.ValidationUtils; 5 import cn.iocoder.yudao.framework.common.util.validation.ValidationUtils;
  6 +import cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClient;
  7 +import cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig;
  8 +import jakarta.validation.Validation;
6 import org.junit.jupiter.api.Disabled; 9 import org.junit.jupiter.api.Disabled;
7 import org.junit.jupiter.api.Test; 10 import org.junit.jupiter.api.Test;
8 11
9 -import jakarta.validation.Validation;  
10 -  
11 public class S3FileClientTest { 12 public class S3FileClientTest {
12 13
13 @Test 14 @Test
yudao-framework/yudao-spring-boot-starter-file/src/test/java/cn/iocoder/yudao/framework/file/core/client/sftp/SftpFileClientTest.java renamed to yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/framework/file/core/sftp/SftpFileClientTest.java
1 -package cn.iocoder.yudao.framework.file.core.client.sftp; 1 +package cn.iocoder.yudao.module.infra.framework.file.core.sftp;
2 2
3 import cn.hutool.core.io.resource.ResourceUtil; 3 import cn.hutool.core.io.resource.ResourceUtil;
4 import cn.hutool.core.util.IdUtil; 4 import cn.hutool.core.util.IdUtil;
  5 +import cn.iocoder.yudao.module.infra.framework.file.core.client.sftp.SftpFileClient;
  6 +import cn.iocoder.yudao.module.infra.framework.file.core.client.sftp.SftpFileClientConfig;
5 import org.junit.jupiter.api.Disabled; 7 import org.junit.jupiter.api.Disabled;
6 import org.junit.jupiter.api.Test; 8 import org.junit.jupiter.api.Test;
7 9
yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/file/FileConfigServiceImplTest.java
@@ -4,12 +4,12 @@ import cn.hutool.core.date.DatePattern; @@ -4,12 +4,12 @@ import cn.hutool.core.date.DatePattern;
4 import cn.hutool.core.date.LocalDateTimeUtil; 4 import cn.hutool.core.date.LocalDateTimeUtil;
5 import cn.hutool.core.map.MapUtil; 5 import cn.hutool.core.map.MapUtil;
6 import cn.iocoder.yudao.framework.common.pojo.PageResult; 6 import cn.iocoder.yudao.framework.common.pojo.PageResult;
7 -import cn.iocoder.yudao.framework.file.core.client.FileClient;  
8 -import cn.iocoder.yudao.framework.file.core.client.FileClientConfig;  
9 -import cn.iocoder.yudao.framework.file.core.client.FileClientFactory;  
10 -import cn.iocoder.yudao.framework.file.core.client.local.LocalFileClient;  
11 -import cn.iocoder.yudao.framework.file.core.client.local.LocalFileClientConfig;  
12 -import cn.iocoder.yudao.framework.file.core.enums.FileStorageEnum; 7 +import cn.iocoder.yudao.module.infra.framework.file.core.client.FileClient;
  8 +import cn.iocoder.yudao.module.infra.framework.file.core.client.FileClientConfig;
  9 +import cn.iocoder.yudao.module.infra.framework.file.core.client.FileClientFactory;
  10 +import cn.iocoder.yudao.module.infra.framework.file.core.client.local.LocalFileClient;
  11 +import cn.iocoder.yudao.module.infra.framework.file.core.client.local.LocalFileClientConfig;
  12 +import cn.iocoder.yudao.module.infra.framework.file.core.enums.FileStorageEnum;
13 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; 13 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
14 import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigPageReqVO; 14 import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigPageReqVO;
15 import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigSaveReqVO; 15 import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigSaveReqVO;
yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/file/FileServiceImplTest.java
@@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.service.file; @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.service.file;
3 import cn.hutool.core.io.resource.ResourceUtil; 3 import cn.hutool.core.io.resource.ResourceUtil;
4 import cn.iocoder.yudao.framework.common.pojo.PageResult; 4 import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; 5 import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
6 -import cn.iocoder.yudao.framework.file.core.client.FileClient; 6 +import cn.iocoder.yudao.module.infra.framework.file.core.client.FileClient;
7 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; 7 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
8 import cn.iocoder.yudao.framework.test.core.util.AssertUtils; 8 import cn.iocoder.yudao.framework.test.core.util.AssertUtils;
9 import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.FilePageReqVO; 9 import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.FilePageReqVO;