ruoyi-file 动态实现 bean 注入

pull/84/head
duandazhi 4 years ago
parent 4ca50fa0c6
commit cfb590a039

@ -17,7 +17,7 @@ import org.springframework.context.annotation.Configuration;
@Configuration
@ConfigurationProperties(prefix = AliyunOssConfig.PREFIX)
public class AliyunOssConfig {
public static final String PREFIX = "aliyun-oss";
public static final String PREFIX = "file.aliyun-oss";
/**
* aliyun oss
* ACCESS_KEY_SECRET

@ -15,7 +15,7 @@ import org.springframework.context.annotation.Configuration;
prefix = CephConfig.PREFIX
)
public class CephConfig {
public static final String PREFIX = "ceph";
public static final String PREFIX = "file.ceph";
/**
* s3 accessKey secretKey
*

@ -2,7 +2,9 @@ package com.ruoyi.file.config;
import com.github.tobato.fastdfs.FdfsClientConstants;
import com.github.tobato.fastdfs.domain.conn.PooledConnectionFactory;
import com.github.tobato.fastdfs.domain.conn.TrackerConnectionManager;
import com.ruoyi.file.service.FastDfsSysFileServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration;
@ -24,7 +26,7 @@ import org.springframework.context.annotation.Configuration;
public class FastDfsConfig {
/**
* 访or ip
* FastDFS {@link PooledConnectionFactory}
* FastDFS {@link PooledConnectionFactory} {@link TrackerConnectionManager}
* //@Value("${fdfs.domain}")
*/
private String domain;

@ -18,7 +18,7 @@ import org.springframework.context.annotation.Configuration;
prefix = FtpConfig.PREFIX
)
public class FtpConfig {
public static final String PREFIX = "ftp";
public static final String PREFIX = "file.ftp";
/**
* ftp访
* eg1: www.ourslook.com

@ -20,7 +20,7 @@ import org.springframework.stereotype.Component;
@Configuration
@ConfigurationProperties(prefix = MinioConfig.PREFIX)
public class MinioConfig {
public static final String PREFIX = "minio";
public static final String PREFIX = "file.minio";
@Bean
public MinioClient getMinioClient() {

@ -20,7 +20,7 @@ import org.springframework.context.annotation.Configuration;
@Configuration
@ConfigurationProperties(prefix = QiniuKodoConfig.PREFIX)
public class QiniuKodoConfig {
public static final String PREFIX = "qiniu";
public static final String PREFIX = "file.qiniu";
/**
* AccessKey ak
* =>https://portal.qiniu.com/user/key

@ -24,7 +24,7 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@ConfigurationProperties(prefix = ResourcesConfig.PREFIX)
public class ResourcesConfig implements WebMvcConfigurer
{
public static final String PREFIX = "file";
public static final String PREFIX = "file.local-file";
/**
* 访 nginx
* eg: http://127.0.0.1:9300

@ -26,7 +26,7 @@ import org.springframework.context.annotation.Configuration;
@Configuration
@ConfigurationProperties(prefix = TencentCosConfig.PREFIX)
public class TencentCosConfig {
public static final String PREFIX = "tencent-cos";
public static final String PREFIX = "file.tencent-cos";
@Bean
public COSClient getCosClient() {

@ -0,0 +1,91 @@
package com.ruoyi.file.config;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import com.qcloud.cos.COSClient;
import com.ruoyi.file.service.*;
import io.minio.MinioClient;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.*;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* webmvc config
*
* @author yabo
* @date 2021-11-18
* <p>
* private RequestMappingHandlerAdapter requestMappingHandlerAdapter;
* ConfigurableWebBindingInitializer initializer = (ConfigurableWebBindingInitializer) requestMappingHandlerAdapter.getWebBindingInitializer();
* if (initializer.getConversionService() != null) {
* GenericConversionService genericConversionService = (GenericConversionService) initializer.getConversionService();
* genericConversionService.addConverter(new CustomConverter());
* }
* @see ISysFileService
* // 具体实现config
* @see AliyunOssConfig oss
* @see CephConfig ceph
* @see FastDfsConfig fastdfs
* @see FtpConfig ftp
* @see MinioConfig minio
* @see QiniuKodoConfig kodo
* @see ResourcesConfig tomcat
* @see TencentCosConfig cos
*/
@RefreshScope
@ConfigurationProperties(prefix = WebMvcConfig.PREFIX)
@Configuration
public class WebMvcConfig implements WebMvcConfigurer, ApplicationContextAware {
public static final String PREFIX = "file";
/***
*
*/
protected ISysFileService.DfsTypeEnum fileServerType = ISysFileService.DfsTypeEnum.DEFAULT;
@Primary
@Description("dfs bean.....")
@ConditionalOnMissingBean
@Bean(name = "ISysFileService")
public ISysFileService registFileBean(FastFileStorageClient fastFileStorageClient, FastDfsConfig fastDfsConfig,
FtpConfig ftpConfig,
AliyunOssConfig aliyunOssConfig,
CephConfig cephConfig,
MinioConfig minioConfig, MinioClient minioClient,
COSClient cosClient, TencentCosConfig tencentCosConfig,
QiniuKodoConfig qiniuKodoConfig,
ResourcesConfig resourcesConfig) {
if (ISysFileService.DfsTypeEnum.FASTDFS.equals(fileServerType)) {
return new FastDfsSysFileServiceImpl(fastFileStorageClient, fastDfsConfig);
} else if (ISysFileService.DfsTypeEnum.FTP.equals(fileServerType)) {
return new FtpFileServiceImpl(ftpConfig);
} else if (ISysFileService.DfsTypeEnum.ALIYUN_OSS.equals(fileServerType)) {
return new AliyunOssDsfServiceImpl(aliyunOssConfig);
} else if (ISysFileService.DfsTypeEnum.CEPH.equals(fileServerType)) {
return new CephSysFileServiceImpl(cephConfig);
} else if (ISysFileService.DfsTypeEnum.MINIO.equals(fileServerType)) {
return new MinioSysFileServiceImpl(minioConfig, minioClient);
} else if (ISysFileService.DfsTypeEnum.TENCENT_COS.equals(fileServerType)) {
return new TencentCosServiceImpl(cosClient, tencentCosConfig);
} else if (ISysFileService.DfsTypeEnum.QINIU_KODO.equals(fileServerType)) {
return new QiniuSysFileServiceImpl(qiniuKodoConfig);
}
return new LocalSysFileServiceImpl(resourcesConfig);
}
public void setFileServerType(ISysFileService.DfsTypeEnum fileServerType) {
this.fileServerType = fileServerType;
}
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
}

@ -7,6 +7,7 @@ import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

@ -42,12 +42,14 @@ import java.util.concurrent.TimeUnit;
* @date 2019/8/6 19:02
* //@see AliyunMsgUtil
*/
@Primary
@Service()
public class AliyunOssDsfServiceImpl implements ISysFileService {
private static final Logger log = LoggerFactory.getLogger(AliyunOssDsfServiceImpl.class);
@Autowired
private AliyunOssConfig aliyunOssConfig;
private final AliyunOssConfig aliyunOssConfig;
public AliyunOssDsfServiceImpl(AliyunOssConfig aliyunOssConfig) {
this.aliyunOssConfig = aliyunOssConfig;
}
/**
* demo https://help.aliyun.com/learn/learningpath/oss.html
* <p>

@ -39,14 +39,15 @@ import java.util.concurrent.atomic.AtomicLong;
* 2:ceph使docker https://www.cnblogs.com/bladeyul/p/10649049.html
* 3:使docker ceph 使aws sdk https://blog.csdn.net/freewebsys/article/details/79553386
*/
@Service()
public class CephSysFileServiceImpl implements ISysFileService {
private static final Logger log = LoggerFactory.getLogger(CephSysFileServiceImpl.class);
@Autowired
private CephConfig cephConfig;
private final CephConfig cephConfig;
protected static AmazonS3 amazonS3 = null;
public CephSysFileServiceImpl(CephConfig cephConfig) {
this.cephConfig = cephConfig;
}
/**
* ceph
*/

@ -20,16 +20,17 @@ import com.github.tobato.fastdfs.service.FastFileStorageClient;
* @author ruoyi
* @see FastDfsConfig
*/
//@Primary
@Service()
public class FastDfsSysFileServiceImpl implements ISysFileService
{
private final Logger logger = LoggerFactory.getLogger(FastDfsSysFileServiceImpl.class);
@Autowired
private FastFileStorageClient storageClient;
@Autowired
private FastDfsConfig fastDfsConfig;
private final FastFileStorageClient storageClient;
private final FastDfsConfig fastDfsConfig;
public FastDfsSysFileServiceImpl(FastFileStorageClient storageClient, FastDfsConfig fastDfsConfig) {
this.storageClient = storageClient;
this.fastDfsConfig = fastDfsConfig;
}
/**
* FastDfs

@ -16,10 +16,12 @@ import java.io.IOException;
* ftp, iislinux ftpvsftpdFileZilla Server
* @author dazer
*/
@Service()
public class FtpFileServiceImpl implements ISysFileService {
@Autowired
private FtpConfig ftpConfig;
private final FtpConfig ftpConfig;
public FtpFileServiceImpl(FtpConfig ftpConfig) {
this.ftpConfig = ftpConfig;
}
@Override
public String uploadFile(MultipartFile file) throws Exception {

@ -39,6 +39,62 @@ public interface ISysFileService
// pdf
"pdf" };
enum DfsTypeEnum {
/**
* ,
* @see LocalSysFileServiceImpl
* 2014-07-06
*/
DEFAULT,
/**
* ftp, iislinux ftpvsftpdFileZilla Server
* FTP访DEFAULT ,DEFAULT: tomcatftp: 使 ftp
* @see FtpFileServiceImpl
* 使tomcat,tomcat访访使nginx 访
* 2019-07-06
*/
FTP,
/**
* dfs, (FastDFS)
* @see FastDfsSysFileServiceImpl
* 2016-09-07
*/
FASTDFS,
/**
* aliyun oss https://help.aliyun.com/learn/learningpath/oss.html ,需要购买
* sts -- - 使URL https://help.aliyun.com/document_detail/32016.html?spm=a2c4g.11186623.6.992.7a943b4aPjkyTA#title-pu8-5o8-x7j
* @see AliyunOssDsfServiceImpl
* 2019-08-06
*/
ALIYUN_OSS,
/**
* CEPH http://docs.ceph.org.cn/
* @see CephSysFileServiceImpl
* 2020-05-06
*/
CEPH,
/**
* minio ossCOS;
* https://min.io/
* http://docs.minio.org.cn/docs/ http://www.minio.org.cn/
* urlsts Presigned presignedGetObject MinIO STS http://docs.minio.org.cn/docs/master/minio-sts-quickstart-guide
* minio SDKS Java Client API http://docs.minio.org.cn/docs/master/java-client-api-reference
* @see MinioSysFileServiceImpl
* 2021-02-09
*/
MINIO,
/**
* cos
* @see TencentCosServiceImpl
*/
TENCENT_COS,
/**
* Kodo
* @see QiniuSysFileServiceImpl
*/
QINIU_KODO
}
/**
*
*

@ -4,6 +4,7 @@ import cn.hutool.core.io.FileUtil;
import com.ruoyi.common.core.exception.CustomException;
import com.ruoyi.file.config.ResourcesConfig;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import com.ruoyi.file.utils.FileUploadUtils;
@ -15,7 +16,6 @@ import java.io.File;
*
* @author ruoyi
*/
@Service()
public class LocalSysFileServiceImpl implements ISysFileService
{
private final ResourcesConfig resourcesConfig;

@ -33,14 +33,15 @@ import java.util.function.Consumer;
* http://docs.minio.org.cn/docs/master/java-client-api-reference#presignedGetObject
* MinIO STS http://docs.minio.org.cn/docs/master/minio-sts-quickstart-guide
*/
//@Primary
@Service()
public class MinioSysFileServiceImpl implements ISysFileService
{
@Autowired
private MinioConfig minioConfig;
@Autowired
private MinioClient minioClient;
private final MinioConfig minioConfig;
private final MinioClient minioClient;
public MinioSysFileServiceImpl(MinioConfig minioConfig, MinioClient minioClient) {
this.minioConfig = minioConfig;
this.minioClient = minioClient;
}
/**
*

@ -31,12 +31,13 @@ import java.io.InputStream;
*
* 访 https://developer.qiniu.com/kodo/1239/java#fusion-antileech
*/
//@Primary
@Service()
public class QiniuSysFileServiceImpl implements ISysFileService {
private static final Logger log = LoggerFactory.getLogger(QiniuSysFileServiceImpl.class);
@Autowired
private QiniuKodoConfig qiniuKodoConfig;
private final QiniuKodoConfig qiniuKodoConfig;
public QiniuSysFileServiceImpl(QiniuKodoConfig qiniuKodoConfig) {
this.qiniuKodoConfig = qiniuKodoConfig;
}
@Override
public String uploadFile(MultipartFile file) throws Exception {

@ -9,7 +9,6 @@ import com.qcloud.cos.model.*;
import com.ruoyi.common.core.exception.CustomException;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.file.config.TencentCosConfig;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.net.URL;
@ -22,8 +21,6 @@ import java.util.List;
* @author yabo
* @see TencentCosConfig
*/
//@Primary
@Service()
public class TencentCosServiceImpl implements ISysFileService {
private final COSClient cosClient;
private final TencentCosConfig config;

@ -16,12 +16,12 @@ spring:
nacos:
discovery:
# 服务注册地址
server-addr: 127.0.0.1:8848
namespace: 72b686a1-d9f6-499f-8275-e481b664779e
server-addr: 192.168.254.146:8948
namespace: 83b5e907-a1b8-4a03-ad76-0f2a1f6e8437
config:
# 配置中心地址
server-addr: 127.0.0.1:8848
namespace: 72b686a1-d9f6-499f-8275-e481b664779e
server-addr: 192.168.254.146:8948
namespace: 83b5e907-a1b8-4a03-ad76-0f2a1f6e8437
# 配置文件格式
file-extension: yml
# 共享配置
@ -29,59 +29,56 @@ spring:
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
# 文件服务器之1 本地文件上传
file:
file-server-type: ALIYUN_OSS
# 文件服务器之1 本地文件上传
local-file:
domain: http://localhost:9300
prefix: /statics
path: D:/ruoyi/uploadPath
# 文件服务器之2 ftp
ftp:
# 文件服务器之2 ftp
ftp:
endpoint: 118.31.2.53
port: 21
user-name: lanjinjun
password:
domain: https://test53.ourslook.com
# 文件服务器之3 FastDFS配置
fdfs:
soTimeout: 3000
connectTimeout: 5000
trackerList: 47.99.175.191:22122
domain: http://47.99.175.191:8888
token-secret-key: test@test
# 文件服务器之4 Minio配置
minio:
# 文件服务器之4 Minio配置
minio:
url: http://10.16.58.152:9000
accessKey: D99KGE6ZTQXSATTJWU24
secretKey: QyVqGnhIQQE734UYSUFlGOZViE6+ZlDEfUG3NjhJ
bucketName: appt-file
domain: https://yq666.bj.gov.cn
expiry-duration: 32400
# 文件服务器之5 aliyun oss
aliyun-oss:
# 文件服务器之5 aliyun oss
aliyun-oss:
access-key: LTAI4GDQSbwgmbsRxxbDXnKT
secret-key: I1xYosCsIf4YgHeFbWUOU4faImeWD2
bucket-name: react-yuebaoxiao-pro
endpoint: oss-cn-shanghai.aliyuncs.com
domain: https://react-yuebaoxiao-pro.oss-cn-shanghai.aliyuncs.com
expiry-duration: 32400
# 文件服务器之6 qiniu 七牛 kodo
qiniu:
# 文件服务器之6 qiniu 七牛 kodo
qiniu:
access-key: pRYrSe_EW4sJHsQ6JyuiRYShA2JCLKtMhT-N4TQD
secret-key: CwTEh1kSLBdxBhIWfFz6h1GgDSokx97CYEV0cC1O
bucket-name: guangdong-oss
domain: http://guangdong-oss.ityun.ltd
expiry-duration: 32400
# 文件服务器之7 tencent cos 文件存储
tencent-cos:
# 文件服务器之7 tencent cos 文件存储
tencent-cos:
access-key: AKIDX9hNAzpdUI0XyRpASj098xa7uYzOekmh
secret-key: sW5VgkdHlDYqy01xiGbkjV5TghUEvYEw
endpoint: ap-chengdu
bucket-name: tencent-cloud-cos-dazer-1253883700
domain: https://cos.ityun.ltd
expiry-duration: 32400
# 文件服务器之3 FastDFS配置
##### fdfs 配置路径特殊, 为了兼容fastdfs
fdfs:
soTimeout: 3000
connectTimeout: 5000
trackerList: 47.99.175.191:22122
domain: http://47.99.175.191:8888
token-secret-key: test@test

Loading…
Cancel
Save