From cb13642e85a9d572d6f88f6ce7e3d7b0893dd713 Mon Sep 17 00:00:00 2001
From: 疯狂的狮子li <15040126243@163.com>
Date: 星期五, 13 八月 2021 21:09:24 +0800
Subject: [PATCH] update 重写 OSS 模块相关实现 支持动态配置(页面配置)
---
ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/CloudServiceEnumd.java | 28 ++
ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractCloudStorageStrategy.java | 13
ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageStrategy.java | 29 --
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java | 6
ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunCloudStorageStrategy.java | 32 --
ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java | 36 ++-
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOssConfigService.java | 2
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java | 89 +++++++--
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssConfigController.java | 2
ruoyi-oss/src/main/java/com/ruoyi/oss/constant/CloudConstant.java | 28 ++
ruoyi-oss/src/main/java/com/ruoyi/oss/properties/CloudStorageProperties.java | 179 ++-----------------
sql/oss.sql | 1
ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuCloudStorageStrategy.java | 41 +---
ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageStrategy.java | 4
ruoyi-ui/src/views/system/oss/config.vue | 9 -
ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudCloudStorageStrategy.java | 34 +--
16 files changed, 204 insertions(+), 329 deletions(-)
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssConfigController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssConfigController.java
index f798ca2..60fed2a 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssConfigController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssConfigController.java
@@ -92,7 +92,7 @@
@Log(title = "浜戝瓨鍌ㄩ厤缃�", businessType = BusinessType.DELETE)
@DeleteMapping("/{ossConfigIds}")
public AjaxResult<Void> remove(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖")
- @PathVariable Integer[] ossConfigIds) {
+ @PathVariable Long[] ossConfigIds) {
return toAjax(iSysOssConfigService.deleteWithValidByIds(Arrays.asList(ossConfigIds), true) ? 1 : 0);
}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/constant/CloudConstant.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/constant/CloudConstant.java
index 5b9da58..697e87f 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/constant/CloudConstant.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/constant/CloudConstant.java
@@ -1,5 +1,10 @@
package com.ruoyi.oss.constant;
+import com.ruoyi.oss.properties.CloudStorageProperties;
+
+import java.util.Arrays;
+import java.util.List;
+
/**
* 浜戝瓨鍌ㄥ父閲�
*
@@ -8,13 +13,32 @@
public class CloudConstant {
/**
+ * OSS妯″潡KEY
+ */
+ public static final String SYS_OSS_KEY = "sys_oss:";
+
+ /**
* 浜戝瓨鍌ㄩ厤缃甂EY
*/
- public final static String CLOUD_STORAGE_CONFIG_KEY = "sys.oss.cloudStorageService";
+ public static final String CLOUD_STORAGE_CONFIG_KEY = "CloudStorageConfig";
+
+ /**
+ * 缂撳瓨閰嶇疆KEY
+ */
+ public static final String CACHE_CONFIG_KEY = SYS_OSS_KEY + CLOUD_STORAGE_CONFIG_KEY;
/**
* 棰勮鍒楄〃璧勬簮寮�鍏矺ey
*/
- public final static String PEREVIEW_LIST_RESOURCE_KEY = "sys.oss.previewListResource";
+ public static final String PEREVIEW_LIST_RESOURCE_KEY = "sys.oss.previewListResource";
+
+ /**
+ * 绯荤粺鏁版嵁ids
+ */
+ public static final List<Integer> SYSTEM_DATA_IDS = Arrays.asList(1, 2, 3, 4);
+
+ public static String getPropertiesName(String key) {
+ return key + CloudStorageProperties.class.getSimpleName();
+ }
}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/CloudServiceEnumd.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/CloudServiceEnumd.java
index 3191dc4..11a571c 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/CloudServiceEnumd.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/CloudServiceEnumd.java
@@ -1,9 +1,10 @@
package com.ruoyi.oss.enumd;
-import com.ruoyi.oss.service.impl.AliyunCloudStorageServiceImpl;
-import com.ruoyi.oss.service.impl.MinioCloudStorageServiceImpl;
-import com.ruoyi.oss.service.impl.QcloudCloudStorageServiceImpl;
-import com.ruoyi.oss.service.impl.QiniuCloudStorageServiceImpl;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.oss.service.impl.AliyunCloudStorageStrategy;
+import com.ruoyi.oss.service.impl.MinioCloudStorageStrategy;
+import com.ruoyi.oss.service.impl.QcloudCloudStorageStrategy;
+import com.ruoyi.oss.service.impl.QiniuCloudStorageStrategy;
import lombok.AllArgsConstructor;
import lombok.Getter;
@@ -19,22 +20,22 @@
/**
* 涓冪墰浜�
*/
- QINIU("qiniu", QiniuCloudStorageServiceImpl.class),
+ QINIU("qiniu", QiniuCloudStorageStrategy.class),
/**
* 闃块噷浜�
*/
- ALIYUN("aliyun", AliyunCloudStorageServiceImpl.class),
+ ALIYUN("aliyun", AliyunCloudStorageStrategy.class),
/**
* 鑵捐浜�
*/
- QCLOUD("qcloud", QcloudCloudStorageServiceImpl.class),
+ QCLOUD("qcloud", QcloudCloudStorageStrategy.class),
/**
* minio
*/
- MINIO("minio", MinioCloudStorageServiceImpl.class);
+ MINIO("minio", MinioCloudStorageStrategy.class);
private final String value;
@@ -48,4 +49,15 @@
}
return null;
}
+
+ public static String getServiceName(String value) {
+ for (CloudServiceEnumd clazz : values()) {
+ if (clazz.getValue().equals(value)) {
+ return StringUtils.uncapitalize(clazz.getServiceClass().getSimpleName());
+ }
+ }
+ return null;
+ }
+
+
}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java
index 90e21ab..ea64b27 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java
@@ -1,15 +1,16 @@
package com.ruoyi.oss.factory;
import cn.hutool.core.convert.Convert;
-import cn.hutool.core.lang.Assert;
-import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.redis.RedisCache;
+import com.ruoyi.common.utils.JsonUtils;
import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.reflect.ReflectUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.oss.constant.CloudConstant;
import com.ruoyi.oss.enumd.CloudServiceEnumd;
import com.ruoyi.oss.exception.OssException;
-import com.ruoyi.oss.service.ICloudStorageService;
+import com.ruoyi.oss.properties.CloudStorageProperties;
+import com.ruoyi.oss.service.ICloudStorageStrategy;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -27,26 +28,37 @@
OssFactory.redisCache = SpringUtils.getBean(RedisCache.class);
}
- private static final Map<String, ICloudStorageService> SERVICES = new ConcurrentHashMap<>();
+ private static final Map<String, ICloudStorageStrategy> SERVICES = new ConcurrentHashMap<>();
- public static ICloudStorageService instance() {
- String type = Convert.toStr(redisCache.getCacheObject(Constants.SYS_CONFIG_KEY + CloudConstant.CLOUD_STORAGE_CONFIG_KEY));
+ public static ICloudStorageStrategy instance() {
+ String type = Convert.toStr(redisCache.getCacheObject(CloudConstant.CACHE_CONFIG_KEY));
if (StringUtils.isEmpty(type)) {
throw new OssException("鏂囦欢瀛樺偍鏈嶅姟绫诲瀷鏃犳硶鎵惧埌!");
}
return instance(type);
}
- public static ICloudStorageService instance(String type) {
- ICloudStorageService service = SERVICES.get(type);
+ public static ICloudStorageStrategy instance(String type) {
+ ICloudStorageStrategy service = SERVICES.get(type);
if (service == null) {
- service = (ICloudStorageService) SpringUtils.getBean(CloudServiceEnumd.getServiceClass(type));
+ Object json = redisCache.getCacheObject(CloudConstant.SYS_OSS_KEY + type);
+ CloudStorageProperties properties = JsonUtils.parseObject(json.toString(), CloudStorageProperties.class);
+ String beanName = CloudServiceEnumd.getServiceName(type);
+ ICloudStorageStrategy bean = (ICloudStorageStrategy) ReflectUtils.newInstance(CloudServiceEnumd.getServiceClass(type), properties);
+ SpringUtils.registerBean(beanName, bean);
+ service = SpringUtils.getBean(beanName);
+ SERVICES.put(type, bean);
}
return service;
}
- public static void register(String type, ICloudStorageService iCloudStorageService) {
- Assert.notNull(type, "type can't be null");
- SERVICES.put(type, iCloudStorageService);
+ public static void destroy(String type) {
+ ICloudStorageStrategy service = SERVICES.get(type);
+ if (service == null) {
+ return;
+ }
+ SpringUtils.unregisterBean(CloudServiceEnumd.getServiceName(type));
+ SERVICES.remove(type);
}
+
}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/CloudStorageProperties.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/CloudStorageProperties.java
index 64784a0..d1bafde 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/CloudStorageProperties.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/CloudStorageProperties.java
@@ -1,9 +1,6 @@
package com.ruoyi.oss.properties;
import lombok.Data;
-import lombok.NoArgsConstructor;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
/**
* OSS浜戝瓨鍌� 閰嶇疆灞炴��
@@ -11,177 +8,41 @@
* @author Lion Li
*/
@Data
-@Component
-@ConfigurationProperties(prefix = "cloud-storage")
public class CloudStorageProperties {
- private Boolean previewListImage;
-
- private QiniuProperties qiniu;
-
- private AliyunProperties aliyun;
-
- private QcloudProperties qcloud;
-
- private MinioProperties minio;
+ /**
+ * 鍩熷悕
+ */
+ private String endpoint;
/**
- * 闃块噷浜� 閰嶇疆灞炴��
- *
- * @author Lion Li
+ * 鍓嶇紑
*/
- @Data
- @NoArgsConstructor
- public static class AliyunProperties {
-
- /**
- * 闃块噷浜戠粦瀹氱殑鍩熷悕
- */
- private String endpoint;
-
- /**
- * 闃块噷浜戣矾寰勫墠缂�
- */
- private String prefix;
-
- /**
- * 闃块噷浜慉ccessKeyId
- */
- private String accessKeyId;
-
- /**
- * 闃块噷浜慉ccessKeySecret
- */
- private String accessKeySecret;
-
- /**
- * 闃块噷浜態ucketName
- */
- private String bucketName;
-
- }
+ private String prefix;
/**
- * Minio 閰嶇疆灞炴��
- *
- * @author Lion Li
+ * ACCESS_KEY
*/
- @Data
- @NoArgsConstructor
- public static class MinioProperties {
-
- /**
- * minio鍩熷悕
- */
- private String endpoint;
-
- /**
- * minio ACCESS_KEY
- */
- private String accessKey;
-
- /**
- * minio SECRET_KEY
- */
- private String secretKey;
-
- /**
- * minio 瀛樺偍绌洪棿鍚�
- */
- private String bucketName;
-
- }
+ private String accessKey;
/**
- * 鑵捐浜慍OS 閰嶇疆灞炴��
- *
- * @author Lion Li
+ * SECRET_KEY
*/
- @Data
- @NoArgsConstructor
- public static class QcloudProperties {
-
- /**
- * 鑵捐浜戠粦瀹氱殑鍩熷悕
- */
- private String endpoint;
-
- /**
- * 鑵捐浜戣矾寰勫墠缂�
- */
- private String prefix;
-
- /**
- * 鑵捐浜慡ecretId
- */
- private String secretId;
-
- /**
- * 鑵捐浜慡ecretKey
- */
- private String secretKey;
-
- /**
- * 鑵捐浜態ucketName
- */
- private String bucketName;
-
- /**
- * 涓冪墰鏄惁浣跨敤https
- */
- private Boolean isHttps;
-
- /**
- * 鑵捐浜慍OS鎵�灞炲湴鍖�
- */
- private String region;
-
- }
+ private String secretKey;
/**
- * 涓冪墰浜� 閰嶇疆灞炴��
- *
- * @author Lion Li
+ * 瀛樺偍绌洪棿鍚�
*/
- @Data
- @NoArgsConstructor
- public static class QiniuProperties {
+ private String bucketName;
- /**
- * 涓冪墰缁戝畾鐨勫煙鍚�
- */
- private String domain;
+ /**
+ * 瀛樺偍鍖哄煙
+ */
+ private String region;
- /**
- * 涓冪墰璺緞鍓嶇紑
- */
- private String prefix;
-
- /**
- * 涓冪墰ACCESS_KEY
- */
- private String accessKey;
-
- /**
- * 涓冪墰SECRET_KEY
- */
- private String secretKey;
-
- /**
- * 涓冪墰瀛樺偍绌洪棿鍚�
- */
- private String bucketName;
-
- /**
- * 涓冪墰瀛樺偍鍖哄煙
- */
- private String region;
-
- /**
- * 涓冪墰鏄惁浣跨敤https
- */
- private Boolean isHttps;
-
- }
+ /**
+ * 鏄惁https锛圷=鏄�,N=鍚︼級
+ */
+ private String isHttps;
}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageService.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageStrategy.java
similarity index 95%
rename from ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageService.java
rename to ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageStrategy.java
index a23c1f5..6f8ed85 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageService.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageStrategy.java
@@ -5,11 +5,11 @@
import java.io.InputStream;
/**
- * 浜戝瓨鍌ㄦ湇鍔℃帴鍙�
+ * 浜戝瓨鍌ㄧ瓥鐣�
*
* @author Lion Li
*/
-public interface ICloudStorageService {
+public interface ICloudStorageStrategy {
void createBucket();
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractCloudStorageService.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractCloudStorageStrategy.java
similarity index 79%
rename from ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractCloudStorageService.java
rename to ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractCloudStorageStrategy.java
index 9bd0013..ec4dc37 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractCloudStorageService.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractCloudStorageStrategy.java
@@ -5,18 +5,20 @@
import cn.hutool.core.util.IdUtil;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.oss.entity.UploadResult;
-import com.ruoyi.oss.service.ICloudStorageService;
-import org.springframework.beans.factory.InitializingBean;
+import com.ruoyi.oss.properties.CloudStorageProperties;
+import com.ruoyi.oss.service.ICloudStorageStrategy;
import java.io.InputStream;
import java.util.Date;
/**
- * 浜戝瓨鍌�(鏀寔涓冪墰銆侀樋閲屼簯銆佽吘璁簯銆乵inio)
+ * 浜戝瓨鍌ㄧ瓥鐣�(鏀寔涓冪墰銆侀樋閲屼簯銆佽吘璁簯銆乵inio)
*
* @author Lion Li
*/
-public abstract class AbstractCloudStorageService implements ICloudStorageService, InitializingBean {
+public abstract class AbstractCloudStorageStrategy implements ICloudStorageStrategy {
+
+ protected CloudStorageProperties properties;
@Override
public abstract void createBucket();
@@ -53,9 +55,6 @@
@Override
public abstract UploadResult uploadSuffix(InputStream inputStream, String suffix, String contentType);
-
- @Override
- public abstract void afterPropertiesSet() throws Exception;
@Override
public abstract String getEndpointLink();
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunCloudStorageServiceImpl.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunCloudStorageStrategy.java
similarity index 76%
rename from ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunCloudStorageServiceImpl.java
rename to ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunCloudStorageStrategy.java
index 2abde1c..11c3476 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunCloudStorageServiceImpl.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunCloudStorageStrategy.java
@@ -1,6 +1,5 @@
package com.ruoyi.oss.service.impl;
-import com.ruoyi.common.utils.StringUtils;
import com.aliyun.oss.ClientConfiguration;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.common.auth.DefaultCredentialProvider;
@@ -8,42 +7,32 @@
import com.aliyun.oss.model.CreateBucketRequest;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectRequest;
+import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.oss.entity.UploadResult;
import com.ruoyi.oss.enumd.CloudServiceEnumd;
import com.ruoyi.oss.exception.OssException;
-import com.ruoyi.oss.factory.OssFactory;
import com.ruoyi.oss.properties.CloudStorageProperties;
-import com.ruoyi.oss.properties.CloudStorageProperties.AliyunProperties;
-import com.ruoyi.oss.service.abstractd.AbstractCloudStorageService;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Lazy;
-import org.springframework.stereotype.Service;
+import com.ruoyi.oss.service.abstractd.AbstractCloudStorageStrategy;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
/**
- * 闃块噷浜戝瓨鍌�
+ * 闃块噷浜戝瓨鍌ㄧ瓥鐣�
*
* @author Lion Li
*/
-@Lazy
-@Service
-public class AliyunCloudStorageServiceImpl extends AbstractCloudStorageService implements InitializingBean {
+public class AliyunCloudStorageStrategy extends AbstractCloudStorageStrategy {
private final OSSClient client;
- private final AliyunProperties properties;
- @Autowired
- public AliyunCloudStorageServiceImpl(CloudStorageProperties properties) {
- this.properties = properties.getAliyun();
+ public AliyunCloudStorageStrategy(CloudStorageProperties cloudStorageProperties) {
+ properties = cloudStorageProperties;
try {
ClientConfiguration configuration = new ClientConfiguration();
DefaultCredentialProvider credentialProvider = new DefaultCredentialProvider(
- this.properties.getAccessKeyId(),
- this.properties.getAccessKeySecret());
- client = new OSSClient(this.properties.getEndpoint(), credentialProvider, configuration);
+ properties.getAccessKey(), properties.getSecretKey());
+ client = new OSSClient(properties.getEndpoint(), credentialProvider, configuration);
createBucket();
} catch (Exception e) {
throw new IllegalArgumentException("闃块噷浜戝瓨鍌ㄩ厤缃敊璇�! 璇锋鏌ョ郴缁熼厤缃�!");
@@ -105,11 +94,6 @@
@Override
public UploadResult uploadSuffix(InputStream inputStream, String suffix, String contentType) {
return upload(inputStream, getPath(properties.getPrefix(), suffix), contentType);
- }
-
- @Override
- public void afterPropertiesSet() throws Exception {
- OssFactory.register(getServiceType(), this);
}
@Override
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageServiceImpl.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageStrategy.java
similarity index 85%
rename from ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageServiceImpl.java
rename to ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageStrategy.java
index 375307b..9edb421 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageServiceImpl.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageStrategy.java
@@ -5,39 +5,29 @@
import com.ruoyi.oss.enumd.CloudServiceEnumd;
import com.ruoyi.oss.enumd.PolicyType;
import com.ruoyi.oss.exception.OssException;
-import com.ruoyi.oss.factory.OssFactory;
import com.ruoyi.oss.properties.CloudStorageProperties;
-import com.ruoyi.oss.properties.CloudStorageProperties.MinioProperties;
-import com.ruoyi.oss.service.abstractd.AbstractCloudStorageService;
+import com.ruoyi.oss.service.abstractd.AbstractCloudStorageStrategy;
import io.minio.*;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Lazy;
import org.springframework.http.MediaType;
-import org.springframework.stereotype.Service;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
/**
- * minio瀛樺偍
+ * minio瀛樺偍绛栫暐
*
* @author Lion Li
*/
-@Lazy
-@Service
-public class MinioCloudStorageServiceImpl extends AbstractCloudStorageService implements InitializingBean {
+public class MinioCloudStorageStrategy extends AbstractCloudStorageStrategy {
private final MinioClient minioClient;
- private final MinioProperties properties;
- @Autowired
- public MinioCloudStorageServiceImpl(CloudStorageProperties properties) {
- this.properties = properties.getMinio();
+ public MinioCloudStorageStrategy(CloudStorageProperties cloudStorageProperties) {
+ properties = cloudStorageProperties;
try {
minioClient = MinioClient.builder()
- .endpoint(this.properties.getEndpoint())
- .credentials(this.properties.getAccessKey(), this.properties.getSecretKey())
+ .endpoint(properties.getEndpoint())
+ .credentials(properties.getAccessKey(), properties.getSecretKey())
.build();
createBucket();
} catch (Exception e) {
@@ -110,11 +100,6 @@
@Override
public UploadResult uploadSuffix(InputStream inputStream, String suffix, String contentType) {
return upload(inputStream, getPath("", suffix), contentType);
- }
-
- @Override
- public void afterPropertiesSet() throws Exception {
- OssFactory.register(getServiceType(), this);
}
@Override
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudCloudStorageServiceImpl.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudCloudStorageStrategy.java
similarity index 77%
rename from ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudCloudStorageServiceImpl.java
rename to ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudCloudStorageStrategy.java
index 523dff6..c30dcbd 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudCloudStorageServiceImpl.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudCloudStorageStrategy.java
@@ -1,6 +1,5 @@
package com.ruoyi.oss.service.impl;
-import com.ruoyi.common.utils.StringUtils;
import com.qcloud.cos.COSClient;
import com.qcloud.cos.ClientConfig;
import com.qcloud.cos.auth.BasicCOSCredentials;
@@ -8,45 +7,35 @@
import com.qcloud.cos.http.HttpProtocol;
import com.qcloud.cos.model.*;
import com.qcloud.cos.region.Region;
+import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.oss.entity.UploadResult;
import com.ruoyi.oss.enumd.CloudServiceEnumd;
import com.ruoyi.oss.exception.OssException;
-import com.ruoyi.oss.factory.OssFactory;
import com.ruoyi.oss.properties.CloudStorageProperties;
-import com.ruoyi.oss.properties.CloudStorageProperties.QcloudProperties;
-import com.ruoyi.oss.service.abstractd.AbstractCloudStorageService;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Lazy;
-import org.springframework.stereotype.Service;
+import com.ruoyi.oss.service.abstractd.AbstractCloudStorageStrategy;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
/**
- * 鑵捐浜戝瓨鍌�
+ * 鑵捐浜戝瓨鍌ㄧ瓥鐣�
*
* @author Lion Li
*/
-@Lazy
-@Service
-public class QcloudCloudStorageServiceImpl extends AbstractCloudStorageService implements InitializingBean {
+public class QcloudCloudStorageStrategy extends AbstractCloudStorageStrategy {
private final COSClient client;
- private final QcloudProperties properties;
- @Autowired
- public QcloudCloudStorageServiceImpl(CloudStorageProperties properties) {
- this.properties = properties.getQcloud();
+ public QcloudCloudStorageStrategy(CloudStorageProperties cloudStorageProperties) {
+ properties = cloudStorageProperties;
try {
COSCredentials credentials = new BasicCOSCredentials(
- this.properties.getSecretId(),
- this.properties.getSecretKey());
+ properties.getAccessKey(), properties.getSecretKey());
// 鍒濆鍖栧鎴风閰嶇疆
ClientConfig clientConfig = new ClientConfig();
// 璁剧疆bucket鎵�鍦ㄧ殑鍖哄煙锛屽崕鍗楋細gz 鍗庡寳锛歵j 鍗庝笢锛歴h
- clientConfig.setRegion(new Region(this.properties.getRegion()));
- if (this.properties.getIsHttps()) {
+ clientConfig.setRegion(new Region(properties.getRegion()));
+ if ("Y".equals(properties.getIsHttps())) {
clientConfig.setHttpProtocol(HttpProtocol.https);
} else {
clientConfig.setHttpProtocol(HttpProtocol.http);
@@ -113,11 +102,6 @@
@Override
public UploadResult uploadSuffix(InputStream inputStream, String suffix, String contentType) {
return upload(inputStream, getPath(properties.getPrefix(), suffix), contentType);
- }
-
- @Override
- public void afterPropertiesSet() throws Exception {
- OssFactory.register(getServiceType(),this);
}
@Override
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuCloudStorageServiceImpl.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuCloudStorageStrategy.java
similarity index 70%
rename from ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuCloudStorageServiceImpl.java
rename to ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuCloudStorageStrategy.java
index f7b4d4e..ef22513 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuCloudStorageServiceImpl.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuCloudStorageStrategy.java
@@ -10,51 +10,37 @@
import com.ruoyi.oss.entity.UploadResult;
import com.ruoyi.oss.enumd.CloudServiceEnumd;
import com.ruoyi.oss.exception.OssException;
-import com.ruoyi.oss.factory.OssFactory;
import com.ruoyi.oss.properties.CloudStorageProperties;
-import com.ruoyi.oss.properties.CloudStorageProperties.QiniuProperties;
-import com.ruoyi.oss.service.abstractd.AbstractCloudStorageService;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Lazy;
-import org.springframework.stereotype.Service;
+import com.ruoyi.oss.service.abstractd.AbstractCloudStorageStrategy;
import java.io.InputStream;
/**
- * 涓冪墰浜戝瓨鍌�
+ * 涓冪墰浜戝瓨鍌ㄧ瓥鐣�
*
* @author Lion Li
*/
-@Lazy
-@Service
-public class QiniuCloudStorageServiceImpl extends AbstractCloudStorageService implements InitializingBean {
+public class QiniuCloudStorageStrategy extends AbstractCloudStorageStrategy {
private final UploadManager uploadManager;
private final BucketManager bucketManager;
private final String token;
- private final QiniuProperties properties;
- @Autowired
- public QiniuCloudStorageServiceImpl(CloudStorageProperties properties) {
- this.properties = properties.getQiniu();
+ public QiniuCloudStorageStrategy(CloudStorageProperties cloudStorageProperties) {
+ properties = cloudStorageProperties;
try {
- Configuration config = new Configuration(getRegion(this.properties.getRegion()));
+ Configuration config = new Configuration(getRegion(properties.getRegion()));
// https璁剧疆
config.useHttpsDomains = false;
- if (this.properties.getIsHttps() != null) {
- config.useHttpsDomains = this.properties.getIsHttps();
- }
+ config.useHttpsDomains = "Y".equals(properties.getIsHttps());
uploadManager = new UploadManager(config);
- Auth auth = Auth.create(
- this.properties.getAccessKey(),
- this.properties.getSecretKey());
- String bucketName = this.properties.getBucketName();
+ Auth auth = Auth.create(properties.getAccessKey(), properties.getSecretKey());
+ String bucketName = properties.getBucketName();
token = auth.uploadToken(bucketName);
bucketManager = new BucketManager(auth, config);
if (!ArrayUtil.contains(bucketManager.buckets(), bucketName)) {
- bucketManager.createBucket(bucketName, this.properties.getRegion());
+ bucketManager.createBucket(bucketName, properties.getRegion());
}
} catch (Exception e) {
throw new IllegalArgumentException("涓冪墰浜戝瓨鍌ㄩ厤缃敊璇�! 璇锋鏌ョ郴缁熼厤缃�!");
@@ -116,13 +102,8 @@
}
@Override
- public void afterPropertiesSet() throws Exception {
- OssFactory.register(getServiceType(),this);
- }
-
- @Override
public String getEndpointLink() {
- return properties.getDomain();
+ return properties.getEndpoint();
}
private Region getRegion(String region) {
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOssConfigService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOssConfigService.java
index 2de440f..f1ece65 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOssConfigService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOssConfigService.java
@@ -48,7 +48,7 @@
* @param isValid 鏄惁鏍¢獙,true-鍒犻櫎鍓嶆牎楠�,false-涓嶆牎楠�
* @return
*/
- Boolean deleteWithValidByIds(Collection<Integer> ids, Boolean isValid);
+ Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 鍚敤鍋滅敤鐘舵��
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java
index 95f0869..49bf1fa 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java
@@ -2,7 +2,6 @@
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -10,23 +9,26 @@
import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
import com.ruoyi.common.core.page.PagePlus;
import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.exception.CustomException;
+import com.ruoyi.common.utils.JsonUtils;
import com.ruoyi.common.utils.PageUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.oss.constant.CloudConstant;
-import com.ruoyi.system.domain.SysConfig;
+import com.ruoyi.oss.factory.OssFactory;
import com.ruoyi.system.domain.SysOssConfig;
import com.ruoyi.system.domain.bo.SysOssConfigBo;
import com.ruoyi.system.domain.vo.SysOssConfigVo;
import com.ruoyi.system.mapper.SysOssConfigMapper;
-import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.service.ISysOssConfigService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import javax.annotation.PostConstruct;
import java.util.Collection;
+import java.util.List;
/**
* 浜戝瓨鍌ㄩ厤缃甋ervice涓氬姟灞傚鐞�
@@ -39,7 +41,22 @@
@Service
public class SysOssConfigServiceImpl extends ServicePlusImpl<SysOssConfigMapper, SysOssConfig, SysOssConfigVo> implements ISysOssConfigService {
- private final ISysConfigService iSysConfigService;
+ private final RedisCache redisCache;
+
+ /**
+ * 椤圭洰鍚姩鏃讹紝鍒濆鍖栧弬鏁板埌缂撳瓨锛屽姞杞介厤缃被
+ */
+ @PostConstruct
+ public void init() {
+ List<SysOssConfig> list = list();
+ for (SysOssConfig config : list) {
+ String configKey = config.getConfigKey();
+ if ("0".equals(config.getStatus())) {
+ redisCache.setCacheObject(CloudConstant.CACHE_CONFIG_KEY, configKey);
+ }
+ redisCache.setCacheObject(getCacheKey(configKey), JsonUtils.toJsonString(config));
+ }
+ }
@Override
public SysOssConfigVo queryById(Integer ossConfigId){
@@ -63,16 +80,29 @@
@Override
public Boolean insertByBo(SysOssConfigBo bo) {
- SysOssConfig add = BeanUtil.toBean(bo, SysOssConfig.class);
- validEntityBeforeSave(add);
- return save(add);
+ SysOssConfig config = BeanUtil.toBean(bo, SysOssConfig.class);
+ validEntityBeforeSave(config);
+ boolean flag = save(config);
+ if (flag) {
+ redisCache.setCacheObject(
+ getCacheKey(config.getConfigKey()),
+ JsonUtils.toJsonString(config));
+ }
+ return flag;
}
@Override
public Boolean updateByBo(SysOssConfigBo bo) {
- SysOssConfig update = BeanUtil.toBean(bo, SysOssConfig.class);
- validEntityBeforeSave(update);
- return updateById(update);
+ SysOssConfig config = BeanUtil.toBean(bo, SysOssConfig.class);
+ validEntityBeforeSave(config);
+ boolean flag = updateById(config);
+ if (flag) {
+ OssFactory.destroy(config.getConfigKey());
+ redisCache.setCacheObject(
+ getCacheKey(config.getConfigKey()),
+ JsonUtils.toJsonString(config));
+ }
+ return flag;
}
/**
@@ -86,13 +116,21 @@
}
@Override
- public Boolean deleteWithValidByIds(Collection<Integer> ids, Boolean isValid) {
+ public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid) {
- if (CollUtil.containsAny(ids, CollUtil.newArrayList(1, 2, 3, 4))) {
+ if (CollUtil.containsAny(ids, CloudConstant.SYSTEM_DATA_IDS)) {
throw new CustomException("绯荤粺鍐呯疆, 涓嶅彲鍒犻櫎!");
}
}
- return removeByIds(ids);
+ boolean flag = removeByIds(ids);
+ if (flag) {
+ for (Long configId : ids) {
+ SysOssConfig config = getById(configId);
+ OssFactory.destroy(config.getConfigKey());
+ redisCache.deleteObject(getCacheKey(config.getConfigKey()));
+ }
+ }
+ return flag;
}
/**
@@ -115,18 +153,23 @@
@Override
@Transactional(rollbackFor = Exception.class)
public int updateOssConfigStatus(SysOssConfigBo bo) {
- SysConfig sysConfig = iSysConfigService.getOne(new LambdaQueryWrapper<SysConfig>()
- .eq(SysConfig::getConfigKey, CloudConstant.CLOUD_STORAGE_CONFIG_KEY));
- if(ObjectUtil.isNotNull(sysConfig)){
- sysConfig.setConfigValue(bo.getConfigKey());
- iSysConfigService.updateConfig(sysConfig);
- } else {
- throw new CustomException("缂哄皯'浜戝瓨鍌ㄩ厤缃甂EY'鍙傛暟!");
- }
SysOssConfig sysOssConfig = BeanUtil.toBean(bo, SysOssConfig.class);
- baseMapper.update(null, new LambdaUpdateWrapper<SysOssConfig>()
+ int row = baseMapper.update(null, new LambdaUpdateWrapper<SysOssConfig>()
.set(SysOssConfig::getStatus, "1"));
- return baseMapper.updateById(sysOssConfig);
+ row += baseMapper.updateById(sysOssConfig);
+ if (row > 0) {
+ redisCache.setCacheObject(CloudConstant.CACHE_CONFIG_KEY, sysOssConfig.getConfigKey());
+ }
+ return row;
}
+ /**
+ * 璁剧疆cache key
+ *
+ * @param configKey 鍙傛暟閿�
+ * @return 缂撳瓨閿甼ey
+ */
+ private String getCacheKey(String configKey) {
+ return CloudConstant.SYS_OSS_KEY + configKey;
+ }
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java
index 771834a..28f0f16 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java
@@ -10,7 +10,7 @@
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.oss.entity.UploadResult;
import com.ruoyi.oss.factory.OssFactory;
-import com.ruoyi.oss.service.ICloudStorageService;
+import com.ruoyi.oss.service.ICloudStorageStrategy;
import com.ruoyi.system.domain.SysOss;
import com.ruoyi.system.domain.bo.SysOssBo;
import com.ruoyi.system.domain.vo.SysOssVo;
@@ -56,7 +56,7 @@
public SysOss upload(MultipartFile file) {
String originalfileName = file.getOriginalFilename();
String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length());
- ICloudStorageService storage = OssFactory.instance();
+ ICloudStorageStrategy storage = OssFactory.instance();
UploadResult uploadResult;
try {
uploadResult = storage.uploadSuffix(file.getBytes(), suffix, file.getContentType());
@@ -81,7 +81,7 @@
}
List<SysOss> list = listByIds(ids);
for (SysOss sysOss : list) {
- ICloudStorageService storage = OssFactory.instance(sysOss.getService());
+ ICloudStorageStrategy storage = OssFactory.instance(sysOss.getService());
storage.delete(sysOss.getUrl());
}
return removeByIds(ids);
diff --git a/ruoyi-ui/src/views/system/oss/config.vue b/ruoyi-ui/src/views/system/oss/config.vue
index 89580ec..c6ea3a6 100644
--- a/ruoyi-ui/src/views/system/oss/config.vue
+++ b/ruoyi-ui/src/views/system/oss/config.vue
@@ -158,15 +158,6 @@
<el-form-item label="鍩�" prop="region">
<el-input v-model="form.region" placeholder="璇疯緭鍏ュ煙" />
</el-form-item>
- <el-form-item label="鐘舵��">
- <el-radio-group v-model="form.status">
- <el-radio
- v-for="dict in statusOptions"
- :key="dict.dictValue"
- :label="dict.dictValue"
- >{{dict.dictLabel}}</el-radio>
- </el-radio-group>
- </el-form-item>
<el-form-item label="澶囨敞" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />
</el-form-item>
diff --git a/sql/oss.sql b/sql/oss.sql
index a86641e..2ecfacf 100644
--- a/sql/oss.sql
+++ b/sql/oss.sql
@@ -40,7 +40,6 @@
primary key (oss_config_id)
) engine=innodb comment='浜戝瓨鍌ㄩ厤缃〃';
-insert into sys_config values(10, 'OSS浜戝瓨鍌ㄦ湇鍔″晢', 'sys.oss.cloudStorageService', 'minio', 'Y', 'admin', sysdate(), '', null, 'OSS浜戝瓨鍌ㄦ湇鍔″晢(qiniu:涓冪墰浜�, aliyun:闃块噷浜�, qcloud:鑵捐浜�, minio: Minio)');
insert into sys_config values(11, 'OSS棰勮鍒楄〃璧勬簮寮�鍏�', 'sys.oss.previewListResource', 'true', 'Y', 'admin', sysdate(), '', null, 'true:寮�鍚�, false:鍏抽棴');
insert into sys_menu values('118', '鏂囦欢绠$悊', '1', '10', 'oss', 'system/oss/index', 1, 0, 'C', '0', '0', 'system:oss:list', 'upload', 'admin', sysdate(), '', null, '鏂囦欢绠$悊鑿滃崟');
--
Gitblit v1.9.3