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 @Configuration
@ConfigurationProperties(prefix = AliyunOssConfig.PREFIX) @ConfigurationProperties(prefix = AliyunOssConfig.PREFIX)
public class AliyunOssConfig { public class AliyunOssConfig {
public static final String PREFIX = "aliyun-oss"; public static final String PREFIX = "file.aliyun-oss";
/** /**
* aliyun oss * aliyun oss
* ACCESS_KEY_SECRET * ACCESS_KEY_SECRET

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

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

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

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

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

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

@ -26,7 +26,7 @@ import org.springframework.context.annotation.Configuration;
@Configuration @Configuration
@ConfigurationProperties(prefix = TencentCosConfig.PREFIX) @ConfigurationProperties(prefix = TencentCosConfig.PREFIX)
public class TencentCosConfig { public class TencentCosConfig {
public static final String PREFIX = "tencent-cos"; public static final String PREFIX = "file.tencent-cos";
@Bean @Bean
public COSClient getCosClient() { 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.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; 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.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;

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

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

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

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

@ -39,6 +39,62 @@ public interface ISysFileService
// pdf // pdf
"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.common.core.exception.CustomException;
import com.ruoyi.file.config.ResourcesConfig; import com.ruoyi.file.config.ResourcesConfig;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import com.ruoyi.file.utils.FileUploadUtils; import com.ruoyi.file.utils.FileUploadUtils;
@ -15,7 +16,6 @@ import java.io.File;
* *
* @author ruoyi * @author ruoyi
*/ */
@Service()
public class LocalSysFileServiceImpl implements ISysFileService public class LocalSysFileServiceImpl implements ISysFileService
{ {
private final ResourcesConfig resourcesConfig; 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 * 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 * MinIO STS http://docs.minio.org.cn/docs/master/minio-sts-quickstart-guide
*/ */
//@Primary
@Service()
public class MinioSysFileServiceImpl implements ISysFileService public class MinioSysFileServiceImpl implements ISysFileService
{ {
@Autowired private final MinioConfig minioConfig;
private MinioConfig minioConfig; private final MinioClient minioClient;
@Autowired
private 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 * 访 https://developer.qiniu.com/kodo/1239/java#fusion-antileech
*/ */
//@Primary
@Service()
public class QiniuSysFileServiceImpl implements ISysFileService { public class QiniuSysFileServiceImpl implements ISysFileService {
private static final Logger log = LoggerFactory.getLogger(QiniuSysFileServiceImpl.class); private static final Logger log = LoggerFactory.getLogger(QiniuSysFileServiceImpl.class);
@Autowired private final QiniuKodoConfig qiniuKodoConfig;
private QiniuKodoConfig qiniuKodoConfig;
public QiniuSysFileServiceImpl(QiniuKodoConfig qiniuKodoConfig) {
this.qiniuKodoConfig = qiniuKodoConfig;
}
@Override @Override
public String uploadFile(MultipartFile file) throws Exception { 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.exception.CustomException;
import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.file.config.TencentCosConfig; import com.ruoyi.file.config.TencentCosConfig;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.net.URL; import java.net.URL;
@ -22,8 +21,6 @@ import java.util.List;
* @author yabo * @author yabo
* @see TencentCosConfig * @see TencentCosConfig
*/ */
//@Primary
@Service()
public class TencentCosServiceImpl implements ISysFileService { public class TencentCosServiceImpl implements ISysFileService {
private final COSClient cosClient; private final COSClient cosClient;
private final TencentCosConfig config; private final TencentCosConfig config;

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