update 重写 OSS 模块相关实现 支持动态配置(页面配置)
This commit is contained in:
parent
6473d4d8be
commit
cb13642e85
|
@ -92,7 +92,7 @@ public class SysOssConfigController extends BaseController {
|
||||||
@Log(title = "云存储配置", businessType = BusinessType.DELETE)
|
@Log(title = "云存储配置", businessType = BusinessType.DELETE)
|
||||||
@DeleteMapping("/{ossConfigIds}")
|
@DeleteMapping("/{ossConfigIds}")
|
||||||
public AjaxResult<Void> remove(@NotEmpty(message = "主键不能为空")
|
public AjaxResult<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||||
@PathVariable Integer[] ossConfigIds) {
|
@PathVariable Long[] ossConfigIds) {
|
||||||
return toAjax(iSysOssConfigService.deleteWithValidByIds(Arrays.asList(ossConfigIds), true) ? 1 : 0);
|
return toAjax(iSysOssConfigService.deleteWithValidByIds(Arrays.asList(ossConfigIds), true) ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,10 @@
|
||||||
package com.ruoyi.oss.constant;
|
package com.ruoyi.oss.constant;
|
||||||
|
|
||||||
|
import com.ruoyi.oss.properties.CloudStorageProperties;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 云存储常量
|
* 云存储常量
|
||||||
*
|
*
|
||||||
|
@ -7,14 +12,33 @@ package com.ruoyi.oss.constant;
|
||||||
*/
|
*/
|
||||||
public class CloudConstant {
|
public class CloudConstant {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OSS模块KEY
|
||||||
|
*/
|
||||||
|
public static final String SYS_OSS_KEY = "sys_oss:";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 云存储配置KEY
|
* 云存储配置KEY
|
||||||
*/
|
*/
|
||||||
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;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 预览列表资源开关Key
|
* 预览列表资源开关Key
|
||||||
*/
|
*/
|
||||||
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();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
package com.ruoyi.oss.enumd;
|
package com.ruoyi.oss.enumd;
|
||||||
|
|
||||||
import com.ruoyi.oss.service.impl.AliyunCloudStorageServiceImpl;
|
import com.ruoyi.common.utils.StringUtils;
|
||||||
import com.ruoyi.oss.service.impl.MinioCloudStorageServiceImpl;
|
import com.ruoyi.oss.service.impl.AliyunCloudStorageStrategy;
|
||||||
import com.ruoyi.oss.service.impl.QcloudCloudStorageServiceImpl;
|
import com.ruoyi.oss.service.impl.MinioCloudStorageStrategy;
|
||||||
import com.ruoyi.oss.service.impl.QiniuCloudStorageServiceImpl;
|
import com.ruoyi.oss.service.impl.QcloudCloudStorageStrategy;
|
||||||
|
import com.ruoyi.oss.service.impl.QiniuCloudStorageStrategy;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@ -19,22 +20,22 @@ public enum CloudServiceEnumd {
|
||||||
/**
|
/**
|
||||||
* 七牛云
|
* 七牛云
|
||||||
*/
|
*/
|
||||||
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("minio", MinioCloudStorageServiceImpl.class);
|
MINIO("minio", MinioCloudStorageStrategy.class);
|
||||||
|
|
||||||
private final String value;
|
private final String value;
|
||||||
|
|
||||||
|
@ -48,4 +49,15 @@ public enum CloudServiceEnumd {
|
||||||
}
|
}
|
||||||
return null;
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,15 +1,16 @@
|
||||||
package com.ruoyi.oss.factory;
|
package com.ruoyi.oss.factory;
|
||||||
|
|
||||||
import cn.hutool.core.convert.Convert;
|
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.core.redis.RedisCache;
|
||||||
|
import com.ruoyi.common.utils.JsonUtils;
|
||||||
import com.ruoyi.common.utils.StringUtils;
|
import com.ruoyi.common.utils.StringUtils;
|
||||||
|
import com.ruoyi.common.utils.reflect.ReflectUtils;
|
||||||
import com.ruoyi.common.utils.spring.SpringUtils;
|
import com.ruoyi.common.utils.spring.SpringUtils;
|
||||||
import com.ruoyi.oss.constant.CloudConstant;
|
import com.ruoyi.oss.constant.CloudConstant;
|
||||||
import com.ruoyi.oss.enumd.CloudServiceEnumd;
|
import com.ruoyi.oss.enumd.CloudServiceEnumd;
|
||||||
import com.ruoyi.oss.exception.OssException;
|
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.Map;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
@ -27,26 +28,37 @@ public class OssFactory {
|
||||||
OssFactory.redisCache = SpringUtils.getBean(RedisCache.class);
|
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() {
|
public static ICloudStorageStrategy instance() {
|
||||||
String type = Convert.toStr(redisCache.getCacheObject(Constants.SYS_CONFIG_KEY + CloudConstant.CLOUD_STORAGE_CONFIG_KEY));
|
String type = Convert.toStr(redisCache.getCacheObject(CloudConstant.CACHE_CONFIG_KEY));
|
||||||
if (StringUtils.isEmpty(type)) {
|
if (StringUtils.isEmpty(type)) {
|
||||||
throw new OssException("文件存储服务类型无法找到!");
|
throw new OssException("文件存储服务类型无法找到!");
|
||||||
}
|
}
|
||||||
return instance(type);
|
return instance(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ICloudStorageService instance(String type) {
|
public static ICloudStorageStrategy instance(String type) {
|
||||||
ICloudStorageService service = SERVICES.get(type);
|
ICloudStorageStrategy service = SERVICES.get(type);
|
||||||
if (service == null) {
|
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;
|
return service;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void register(String type, ICloudStorageService iCloudStorageService) {
|
public static void destroy(String type) {
|
||||||
Assert.notNull(type, "type can't be null");
|
ICloudStorageStrategy service = SERVICES.get(type);
|
||||||
SERVICES.put(type, iCloudStorageService);
|
if (service == null) {
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
SpringUtils.unregisterBean(CloudServiceEnumd.getServiceName(type));
|
||||||
|
SERVICES.remove(type);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
package com.ruoyi.oss.properties;
|
package com.ruoyi.oss.properties;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
|
||||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* OSS云存储 配置属性
|
* OSS云存储 配置属性
|
||||||
|
@ -11,177 +8,41 @@ import org.springframework.stereotype.Component;
|
||||||
* @author Lion Li
|
* @author Lion Li
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
@Component
|
|
||||||
@ConfigurationProperties(prefix = "cloud-storage")
|
|
||||||
public class CloudStorageProperties {
|
public class CloudStorageProperties {
|
||||||
|
|
||||||
private Boolean previewListImage;
|
|
||||||
|
|
||||||
private QiniuProperties qiniu;
|
|
||||||
|
|
||||||
private AliyunProperties aliyun;
|
|
||||||
|
|
||||||
private QcloudProperties qcloud;
|
|
||||||
|
|
||||||
private MinioProperties minio;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 阿里云 配置属性
|
* 域名
|
||||||
*
|
|
||||||
* @author Lion Li
|
|
||||||
*/
|
|
||||||
@Data
|
|
||||||
@NoArgsConstructor
|
|
||||||
public static class AliyunProperties {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 阿里云绑定的域名
|
|
||||||
*/
|
*/
|
||||||
private String endpoint;
|
private String endpoint;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 阿里云路径前缀
|
* 前缀
|
||||||
*/
|
*/
|
||||||
private String prefix;
|
private String prefix;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 阿里云AccessKeyId
|
* ACCESS_KEY
|
||||||
*/
|
|
||||||
private String accessKeyId;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 阿里云AccessKeySecret
|
|
||||||
*/
|
|
||||||
private String accessKeySecret;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 阿里云BucketName
|
|
||||||
*/
|
|
||||||
private String bucketName;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Minio 配置属性
|
|
||||||
*
|
|
||||||
* @author Lion Li
|
|
||||||
*/
|
|
||||||
@Data
|
|
||||||
@NoArgsConstructor
|
|
||||||
public static class MinioProperties {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* minio域名
|
|
||||||
*/
|
|
||||||
private String endpoint;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* minio ACCESS_KEY
|
|
||||||
*/
|
*/
|
||||||
private String accessKey;
|
private String accessKey;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* minio SECRET_KEY
|
* SECRET_KEY
|
||||||
*/
|
*/
|
||||||
private String secretKey;
|
private String secretKey;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* minio 存储空间名
|
* 存储空间名
|
||||||
*/
|
|
||||||
private String bucketName;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 腾讯云COS 配置属性
|
|
||||||
*
|
|
||||||
* @author Lion Li
|
|
||||||
*/
|
|
||||||
@Data
|
|
||||||
@NoArgsConstructor
|
|
||||||
public static class QcloudProperties {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 腾讯云绑定的域名
|
|
||||||
*/
|
|
||||||
private String endpoint;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 腾讯云路径前缀
|
|
||||||
*/
|
|
||||||
private String prefix;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 腾讯云SecretId
|
|
||||||
*/
|
|
||||||
private String secretId;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 腾讯云SecretKey
|
|
||||||
*/
|
|
||||||
private String secretKey;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 腾讯云BucketName
|
|
||||||
*/
|
*/
|
||||||
private String bucketName;
|
private String bucketName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 七牛是否使用https
|
* 存储区域
|
||||||
*/
|
|
||||||
private Boolean isHttps;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 腾讯云COS所属地区
|
|
||||||
*/
|
|
||||||
private String region;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 七牛云 配置属性
|
|
||||||
*
|
|
||||||
* @author Lion Li
|
|
||||||
*/
|
|
||||||
@Data
|
|
||||||
@NoArgsConstructor
|
|
||||||
public static class QiniuProperties {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 七牛绑定的域名
|
|
||||||
*/
|
|
||||||
private String domain;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 七牛路径前缀
|
|
||||||
*/
|
|
||||||
private String prefix;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 七牛ACCESS_KEY
|
|
||||||
*/
|
|
||||||
private String accessKey;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 七牛SECRET_KEY
|
|
||||||
*/
|
|
||||||
private String secretKey;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 七牛存储空间名
|
|
||||||
*/
|
|
||||||
private String bucketName;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 七牛存储区域
|
|
||||||
*/
|
*/
|
||||||
private String region;
|
private String region;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 七牛是否使用https
|
* 是否https(Y=是,N=否)
|
||||||
*/
|
*/
|
||||||
private Boolean isHttps;
|
private String isHttps;
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,11 +5,11 @@ import com.ruoyi.oss.entity.UploadResult;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 云存储服务接口
|
* 云存储策略
|
||||||
*
|
*
|
||||||
* @author Lion Li
|
* @author Lion Li
|
||||||
*/
|
*/
|
||||||
public interface ICloudStorageService {
|
public interface ICloudStorageStrategy {
|
||||||
|
|
||||||
void createBucket();
|
void createBucket();
|
||||||
|
|
|
@ -5,18 +5,20 @@ import cn.hutool.core.io.IoUtil;
|
||||||
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.core.util.IdUtil;
|
||||||
import com.ruoyi.common.utils.StringUtils;
|
import com.ruoyi.common.utils.StringUtils;
|
||||||
import com.ruoyi.oss.entity.UploadResult;
|
import com.ruoyi.oss.entity.UploadResult;
|
||||||
import com.ruoyi.oss.service.ICloudStorageService;
|
import com.ruoyi.oss.properties.CloudStorageProperties;
|
||||||
import org.springframework.beans.factory.InitializingBean;
|
import com.ruoyi.oss.service.ICloudStorageStrategy;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 云存储(支持七牛、阿里云、腾讯云、minio)
|
* 云存储策略(支持七牛、阿里云、腾讯云、minio)
|
||||||
*
|
*
|
||||||
* @author Lion Li
|
* @author Lion Li
|
||||||
*/
|
*/
|
||||||
public abstract class AbstractCloudStorageService implements ICloudStorageService, InitializingBean {
|
public abstract class AbstractCloudStorageStrategy implements ICloudStorageStrategy {
|
||||||
|
|
||||||
|
protected CloudStorageProperties properties;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public abstract void createBucket();
|
public abstract void createBucket();
|
||||||
|
@ -54,9 +56,6 @@ public abstract class AbstractCloudStorageService implements ICloudStorageServic
|
||||||
@Override
|
@Override
|
||||||
public abstract UploadResult uploadSuffix(InputStream inputStream, String suffix, String contentType);
|
public abstract UploadResult uploadSuffix(InputStream inputStream, String suffix, String contentType);
|
||||||
|
|
||||||
@Override
|
|
||||||
public abstract void afterPropertiesSet() throws Exception;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public abstract String getEndpointLink();
|
public abstract String getEndpointLink();
|
||||||
}
|
}
|
|
@ -1,6 +1,5 @@
|
||||||
package com.ruoyi.oss.service.impl;
|
package com.ruoyi.oss.service.impl;
|
||||||
|
|
||||||
import com.ruoyi.common.utils.StringUtils;
|
|
||||||
import com.aliyun.oss.ClientConfiguration;
|
import com.aliyun.oss.ClientConfiguration;
|
||||||
import com.aliyun.oss.OSSClient;
|
import com.aliyun.oss.OSSClient;
|
||||||
import com.aliyun.oss.common.auth.DefaultCredentialProvider;
|
import com.aliyun.oss.common.auth.DefaultCredentialProvider;
|
||||||
|
@ -8,42 +7,32 @@ import com.aliyun.oss.model.CannedAccessControlList;
|
||||||
import com.aliyun.oss.model.CreateBucketRequest;
|
import com.aliyun.oss.model.CreateBucketRequest;
|
||||||
import com.aliyun.oss.model.ObjectMetadata;
|
import com.aliyun.oss.model.ObjectMetadata;
|
||||||
import com.aliyun.oss.model.PutObjectRequest;
|
import com.aliyun.oss.model.PutObjectRequest;
|
||||||
|
import com.ruoyi.common.utils.StringUtils;
|
||||||
import com.ruoyi.oss.entity.UploadResult;
|
import com.ruoyi.oss.entity.UploadResult;
|
||||||
import com.ruoyi.oss.enumd.CloudServiceEnumd;
|
import com.ruoyi.oss.enumd.CloudServiceEnumd;
|
||||||
import com.ruoyi.oss.exception.OssException;
|
import com.ruoyi.oss.exception.OssException;
|
||||||
import com.ruoyi.oss.factory.OssFactory;
|
|
||||||
import com.ruoyi.oss.properties.CloudStorageProperties;
|
import com.ruoyi.oss.properties.CloudStorageProperties;
|
||||||
import com.ruoyi.oss.properties.CloudStorageProperties.AliyunProperties;
|
import com.ruoyi.oss.service.abstractd.AbstractCloudStorageStrategy;
|
||||||
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 java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 阿里云存储
|
* 阿里云存储策略
|
||||||
*
|
*
|
||||||
* @author Lion Li
|
* @author Lion Li
|
||||||
*/
|
*/
|
||||||
@Lazy
|
public class AliyunCloudStorageStrategy extends AbstractCloudStorageStrategy {
|
||||||
@Service
|
|
||||||
public class AliyunCloudStorageServiceImpl extends AbstractCloudStorageService implements InitializingBean {
|
|
||||||
|
|
||||||
private final OSSClient client;
|
private final OSSClient client;
|
||||||
private final AliyunProperties properties;
|
|
||||||
|
|
||||||
@Autowired
|
public AliyunCloudStorageStrategy(CloudStorageProperties cloudStorageProperties) {
|
||||||
public AliyunCloudStorageServiceImpl(CloudStorageProperties properties) {
|
properties = cloudStorageProperties;
|
||||||
this.properties = properties.getAliyun();
|
|
||||||
try {
|
try {
|
||||||
ClientConfiguration configuration = new ClientConfiguration();
|
ClientConfiguration configuration = new ClientConfiguration();
|
||||||
DefaultCredentialProvider credentialProvider = new DefaultCredentialProvider(
|
DefaultCredentialProvider credentialProvider = new DefaultCredentialProvider(
|
||||||
this.properties.getAccessKeyId(),
|
properties.getAccessKey(), properties.getSecretKey());
|
||||||
this.properties.getAccessKeySecret());
|
client = new OSSClient(properties.getEndpoint(), credentialProvider, configuration);
|
||||||
client = new OSSClient(this.properties.getEndpoint(), credentialProvider, configuration);
|
|
||||||
createBucket();
|
createBucket();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new IllegalArgumentException("阿里云存储配置错误! 请检查系统配置!");
|
throw new IllegalArgumentException("阿里云存储配置错误! 请检查系统配置!");
|
||||||
|
@ -107,11 +96,6 @@ public class AliyunCloudStorageServiceImpl extends AbstractCloudStorageService i
|
||||||
return upload(inputStream, getPath(properties.getPrefix(), suffix), contentType);
|
return upload(inputStream, getPath(properties.getPrefix(), suffix), contentType);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void afterPropertiesSet() throws Exception {
|
|
||||||
OssFactory.register(getServiceType(), this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getEndpointLink() {
|
public String getEndpointLink() {
|
||||||
String endpoint = properties.getEndpoint();
|
String endpoint = properties.getEndpoint();
|
|
@ -5,39 +5,29 @@ import com.ruoyi.oss.entity.UploadResult;
|
||||||
import com.ruoyi.oss.enumd.CloudServiceEnumd;
|
import com.ruoyi.oss.enumd.CloudServiceEnumd;
|
||||||
import com.ruoyi.oss.enumd.PolicyType;
|
import com.ruoyi.oss.enumd.PolicyType;
|
||||||
import com.ruoyi.oss.exception.OssException;
|
import com.ruoyi.oss.exception.OssException;
|
||||||
import com.ruoyi.oss.factory.OssFactory;
|
|
||||||
import com.ruoyi.oss.properties.CloudStorageProperties;
|
import com.ruoyi.oss.properties.CloudStorageProperties;
|
||||||
import com.ruoyi.oss.properties.CloudStorageProperties.MinioProperties;
|
import com.ruoyi.oss.service.abstractd.AbstractCloudStorageStrategy;
|
||||||
import com.ruoyi.oss.service.abstractd.AbstractCloudStorageService;
|
|
||||||
import io.minio.*;
|
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.http.MediaType;
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* minio存储
|
* minio存储策略
|
||||||
*
|
*
|
||||||
* @author Lion Li
|
* @author Lion Li
|
||||||
*/
|
*/
|
||||||
@Lazy
|
public class MinioCloudStorageStrategy extends AbstractCloudStorageStrategy {
|
||||||
@Service
|
|
||||||
public class MinioCloudStorageServiceImpl extends AbstractCloudStorageService implements InitializingBean {
|
|
||||||
|
|
||||||
private final MinioClient minioClient;
|
private final MinioClient minioClient;
|
||||||
private final MinioProperties properties;
|
|
||||||
|
|
||||||
@Autowired
|
public MinioCloudStorageStrategy(CloudStorageProperties cloudStorageProperties) {
|
||||||
public MinioCloudStorageServiceImpl(CloudStorageProperties properties) {
|
properties = cloudStorageProperties;
|
||||||
this.properties = properties.getMinio();
|
|
||||||
try {
|
try {
|
||||||
minioClient = MinioClient.builder()
|
minioClient = MinioClient.builder()
|
||||||
.endpoint(this.properties.getEndpoint())
|
.endpoint(properties.getEndpoint())
|
||||||
.credentials(this.properties.getAccessKey(), this.properties.getSecretKey())
|
.credentials(properties.getAccessKey(), properties.getSecretKey())
|
||||||
.build();
|
.build();
|
||||||
createBucket();
|
createBucket();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
@ -112,11 +102,6 @@ public class MinioCloudStorageServiceImpl extends AbstractCloudStorageService im
|
||||||
return upload(inputStream, getPath("", suffix), contentType);
|
return upload(inputStream, getPath("", suffix), contentType);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void afterPropertiesSet() throws Exception {
|
|
||||||
OssFactory.register(getServiceType(), this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getEndpointLink() {
|
public String getEndpointLink() {
|
||||||
return properties.getEndpoint() + "/" + properties.getBucketName();
|
return properties.getEndpoint() + "/" + properties.getBucketName();
|
|
@ -1,6 +1,5 @@
|
||||||
package com.ruoyi.oss.service.impl;
|
package com.ruoyi.oss.service.impl;
|
||||||
|
|
||||||
import com.ruoyi.common.utils.StringUtils;
|
|
||||||
import com.qcloud.cos.COSClient;
|
import com.qcloud.cos.COSClient;
|
||||||
import com.qcloud.cos.ClientConfig;
|
import com.qcloud.cos.ClientConfig;
|
||||||
import com.qcloud.cos.auth.BasicCOSCredentials;
|
import com.qcloud.cos.auth.BasicCOSCredentials;
|
||||||
|
@ -8,45 +7,35 @@ import com.qcloud.cos.auth.COSCredentials;
|
||||||
import com.qcloud.cos.http.HttpProtocol;
|
import com.qcloud.cos.http.HttpProtocol;
|
||||||
import com.qcloud.cos.model.*;
|
import com.qcloud.cos.model.*;
|
||||||
import com.qcloud.cos.region.Region;
|
import com.qcloud.cos.region.Region;
|
||||||
|
import com.ruoyi.common.utils.StringUtils;
|
||||||
import com.ruoyi.oss.entity.UploadResult;
|
import com.ruoyi.oss.entity.UploadResult;
|
||||||
import com.ruoyi.oss.enumd.CloudServiceEnumd;
|
import com.ruoyi.oss.enumd.CloudServiceEnumd;
|
||||||
import com.ruoyi.oss.exception.OssException;
|
import com.ruoyi.oss.exception.OssException;
|
||||||
import com.ruoyi.oss.factory.OssFactory;
|
|
||||||
import com.ruoyi.oss.properties.CloudStorageProperties;
|
import com.ruoyi.oss.properties.CloudStorageProperties;
|
||||||
import com.ruoyi.oss.properties.CloudStorageProperties.QcloudProperties;
|
import com.ruoyi.oss.service.abstractd.AbstractCloudStorageStrategy;
|
||||||
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 java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 腾讯云存储
|
* 腾讯云存储策略
|
||||||
*
|
*
|
||||||
* @author Lion Li
|
* @author Lion Li
|
||||||
*/
|
*/
|
||||||
@Lazy
|
public class QcloudCloudStorageStrategy extends AbstractCloudStorageStrategy {
|
||||||
@Service
|
|
||||||
public class QcloudCloudStorageServiceImpl extends AbstractCloudStorageService implements InitializingBean {
|
|
||||||
|
|
||||||
private final COSClient client;
|
private final COSClient client;
|
||||||
private final QcloudProperties properties;
|
|
||||||
|
|
||||||
@Autowired
|
public QcloudCloudStorageStrategy(CloudStorageProperties cloudStorageProperties) {
|
||||||
public QcloudCloudStorageServiceImpl(CloudStorageProperties properties) {
|
properties = cloudStorageProperties;
|
||||||
this.properties = properties.getQcloud();
|
|
||||||
try {
|
try {
|
||||||
COSCredentials credentials = new BasicCOSCredentials(
|
COSCredentials credentials = new BasicCOSCredentials(
|
||||||
this.properties.getSecretId(),
|
properties.getAccessKey(), properties.getSecretKey());
|
||||||
this.properties.getSecretKey());
|
|
||||||
// 初始化客户端配置
|
// 初始化客户端配置
|
||||||
ClientConfig clientConfig = new ClientConfig();
|
ClientConfig clientConfig = new ClientConfig();
|
||||||
// 设置bucket所在的区域,华南:gz 华北:tj 华东:sh
|
// 设置bucket所在的区域,华南:gz 华北:tj 华东:sh
|
||||||
clientConfig.setRegion(new Region(this.properties.getRegion()));
|
clientConfig.setRegion(new Region(properties.getRegion()));
|
||||||
if (this.properties.getIsHttps()) {
|
if ("Y".equals(properties.getIsHttps())) {
|
||||||
clientConfig.setHttpProtocol(HttpProtocol.https);
|
clientConfig.setHttpProtocol(HttpProtocol.https);
|
||||||
} else {
|
} else {
|
||||||
clientConfig.setHttpProtocol(HttpProtocol.http);
|
clientConfig.setHttpProtocol(HttpProtocol.http);
|
||||||
|
@ -115,11 +104,6 @@ public class QcloudCloudStorageServiceImpl extends AbstractCloudStorageService i
|
||||||
return upload(inputStream, getPath(properties.getPrefix(), suffix), contentType);
|
return upload(inputStream, getPath(properties.getPrefix(), suffix), contentType);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void afterPropertiesSet() throws Exception {
|
|
||||||
OssFactory.register(getServiceType(),this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getEndpointLink() {
|
public String getEndpointLink() {
|
||||||
String endpoint = properties.getEndpoint();
|
String endpoint = properties.getEndpoint();
|
|
@ -10,51 +10,37 @@ import com.qiniu.util.Auth;
|
||||||
import com.ruoyi.oss.entity.UploadResult;
|
import com.ruoyi.oss.entity.UploadResult;
|
||||||
import com.ruoyi.oss.enumd.CloudServiceEnumd;
|
import com.ruoyi.oss.enumd.CloudServiceEnumd;
|
||||||
import com.ruoyi.oss.exception.OssException;
|
import com.ruoyi.oss.exception.OssException;
|
||||||
import com.ruoyi.oss.factory.OssFactory;
|
|
||||||
import com.ruoyi.oss.properties.CloudStorageProperties;
|
import com.ruoyi.oss.properties.CloudStorageProperties;
|
||||||
import com.ruoyi.oss.properties.CloudStorageProperties.QiniuProperties;
|
import com.ruoyi.oss.service.abstractd.AbstractCloudStorageStrategy;
|
||||||
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 java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 七牛云存储
|
* 七牛云存储策略
|
||||||
*
|
*
|
||||||
* @author Lion Li
|
* @author Lion Li
|
||||||
*/
|
*/
|
||||||
@Lazy
|
public class QiniuCloudStorageStrategy extends AbstractCloudStorageStrategy {
|
||||||
@Service
|
|
||||||
public class QiniuCloudStorageServiceImpl extends AbstractCloudStorageService implements InitializingBean {
|
|
||||||
|
|
||||||
private final UploadManager uploadManager;
|
private final UploadManager uploadManager;
|
||||||
private final BucketManager bucketManager;
|
private final BucketManager bucketManager;
|
||||||
private final String token;
|
private final String token;
|
||||||
private final QiniuProperties properties;
|
|
||||||
|
|
||||||
@Autowired
|
public QiniuCloudStorageStrategy(CloudStorageProperties cloudStorageProperties) {
|
||||||
public QiniuCloudStorageServiceImpl(CloudStorageProperties properties) {
|
properties = cloudStorageProperties;
|
||||||
this.properties = properties.getQiniu();
|
|
||||||
try {
|
try {
|
||||||
Configuration config = new Configuration(getRegion(this.properties.getRegion()));
|
Configuration config = new Configuration(getRegion(properties.getRegion()));
|
||||||
// https设置
|
// https设置
|
||||||
config.useHttpsDomains = false;
|
config.useHttpsDomains = false;
|
||||||
if (this.properties.getIsHttps() != null) {
|
config.useHttpsDomains = "Y".equals(properties.getIsHttps());
|
||||||
config.useHttpsDomains = this.properties.getIsHttps();
|
|
||||||
}
|
|
||||||
uploadManager = new UploadManager(config);
|
uploadManager = new UploadManager(config);
|
||||||
Auth auth = Auth.create(
|
Auth auth = Auth.create(properties.getAccessKey(), properties.getSecretKey());
|
||||||
this.properties.getAccessKey(),
|
String bucketName = properties.getBucketName();
|
||||||
this.properties.getSecretKey());
|
|
||||||
String bucketName = this.properties.getBucketName();
|
|
||||||
token = auth.uploadToken(bucketName);
|
token = auth.uploadToken(bucketName);
|
||||||
bucketManager = new BucketManager(auth, config);
|
bucketManager = new BucketManager(auth, config);
|
||||||
|
|
||||||
if (!ArrayUtil.contains(bucketManager.buckets(), bucketName)) {
|
if (!ArrayUtil.contains(bucketManager.buckets(), bucketName)) {
|
||||||
bucketManager.createBucket(bucketName, this.properties.getRegion());
|
bucketManager.createBucket(bucketName, properties.getRegion());
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new IllegalArgumentException("七牛云存储配置错误! 请检查系统配置!");
|
throw new IllegalArgumentException("七牛云存储配置错误! 请检查系统配置!");
|
||||||
|
@ -115,14 +101,9 @@ public class QiniuCloudStorageServiceImpl extends AbstractCloudStorageService im
|
||||||
return upload(inputStream, getPath(properties.getPrefix(), suffix), contentType);
|
return upload(inputStream, getPath(properties.getPrefix(), suffix), contentType);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void afterPropertiesSet() throws Exception {
|
|
||||||
OssFactory.register(getServiceType(),this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getEndpointLink() {
|
public String getEndpointLink() {
|
||||||
return properties.getDomain();
|
return properties.getEndpoint();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Region getRegion(String region) {
|
private Region getRegion(String region) {
|
|
@ -48,7 +48,7 @@ public interface ISysOssConfigService extends IServicePlus<SysOssConfig, SysOssC
|
||||||
* @param isValid 是否校验,true-删除前校验,false-不校验
|
* @param isValid 是否校验,true-删除前校验,false-不校验
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
Boolean deleteWithValidByIds(Collection<Integer> ids, Boolean isValid);
|
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 启用停用状态
|
* 启用停用状态
|
||||||
|
|
|
@ -2,7 +2,6 @@ package com.ruoyi.system.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import cn.hutool.core.collection.CollUtil;
|
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.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
|
@ -10,23 +9,26 @@ import com.ruoyi.common.constant.UserConstants;
|
||||||
import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
|
import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
|
||||||
import com.ruoyi.common.core.page.PagePlus;
|
import com.ruoyi.common.core.page.PagePlus;
|
||||||
import com.ruoyi.common.core.page.TableDataInfo;
|
import com.ruoyi.common.core.page.TableDataInfo;
|
||||||
|
import com.ruoyi.common.core.redis.RedisCache;
|
||||||
import com.ruoyi.common.exception.CustomException;
|
import com.ruoyi.common.exception.CustomException;
|
||||||
|
import com.ruoyi.common.utils.JsonUtils;
|
||||||
import com.ruoyi.common.utils.PageUtils;
|
import com.ruoyi.common.utils.PageUtils;
|
||||||
import com.ruoyi.common.utils.StringUtils;
|
import com.ruoyi.common.utils.StringUtils;
|
||||||
import com.ruoyi.oss.constant.CloudConstant;
|
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.SysOssConfig;
|
||||||
import com.ruoyi.system.domain.bo.SysOssConfigBo;
|
import com.ruoyi.system.domain.bo.SysOssConfigBo;
|
||||||
import com.ruoyi.system.domain.vo.SysOssConfigVo;
|
import com.ruoyi.system.domain.vo.SysOssConfigVo;
|
||||||
import com.ruoyi.system.mapper.SysOssConfigMapper;
|
import com.ruoyi.system.mapper.SysOssConfigMapper;
|
||||||
import com.ruoyi.system.service.ISysConfigService;
|
|
||||||
import com.ruoyi.system.service.ISysOssConfigService;
|
import com.ruoyi.system.service.ISysOssConfigService;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 云存储配置Service业务层处理
|
* 云存储配置Service业务层处理
|
||||||
|
@ -39,7 +41,22 @@ import java.util.Collection;
|
||||||
@Service
|
@Service
|
||||||
public class SysOssConfigServiceImpl extends ServicePlusImpl<SysOssConfigMapper, SysOssConfig, SysOssConfigVo> implements ISysOssConfigService {
|
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
|
@Override
|
||||||
public SysOssConfigVo queryById(Integer ossConfigId){
|
public SysOssConfigVo queryById(Integer ossConfigId){
|
||||||
|
@ -63,16 +80,29 @@ public class SysOssConfigServiceImpl extends ServicePlusImpl<SysOssConfigMapper,
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Boolean insertByBo(SysOssConfigBo bo) {
|
public Boolean insertByBo(SysOssConfigBo bo) {
|
||||||
SysOssConfig add = BeanUtil.toBean(bo, SysOssConfig.class);
|
SysOssConfig config = BeanUtil.toBean(bo, SysOssConfig.class);
|
||||||
validEntityBeforeSave(add);
|
validEntityBeforeSave(config);
|
||||||
return save(add);
|
boolean flag = save(config);
|
||||||
|
if (flag) {
|
||||||
|
redisCache.setCacheObject(
|
||||||
|
getCacheKey(config.getConfigKey()),
|
||||||
|
JsonUtils.toJsonString(config));
|
||||||
|
}
|
||||||
|
return flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Boolean updateByBo(SysOssConfigBo bo) {
|
public Boolean updateByBo(SysOssConfigBo bo) {
|
||||||
SysOssConfig update = BeanUtil.toBean(bo, SysOssConfig.class);
|
SysOssConfig config = BeanUtil.toBean(bo, SysOssConfig.class);
|
||||||
validEntityBeforeSave(update);
|
validEntityBeforeSave(config);
|
||||||
return updateById(update);
|
boolean flag = updateById(config);
|
||||||
|
if (flag) {
|
||||||
|
OssFactory.destroy(config.getConfigKey());
|
||||||
|
redisCache.setCacheObject(
|
||||||
|
getCacheKey(config.getConfigKey()),
|
||||||
|
JsonUtils.toJsonString(config));
|
||||||
|
}
|
||||||
|
return flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -86,13 +116,21 @@ public class SysOssConfigServiceImpl extends ServicePlusImpl<SysOssConfigMapper,
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Boolean deleteWithValidByIds(Collection<Integer> ids, Boolean isValid) {
|
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||||
if(isValid) {
|
if(isValid) {
|
||||||
if (CollUtil.containsAny(ids, CollUtil.newArrayList(1, 2, 3, 4))) {
|
if (CollUtil.containsAny(ids, CloudConstant.SYSTEM_DATA_IDS)) {
|
||||||
throw new CustomException("系统内置, 不可删除!");
|
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 @@ public class SysOssConfigServiceImpl extends ServicePlusImpl<SysOssConfigMapper,
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public int updateOssConfigStatus(SysOssConfigBo bo) {
|
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("缺少'云存储配置KEY'参数!");
|
|
||||||
}
|
|
||||||
SysOssConfig sysOssConfig = BeanUtil.toBean(bo, SysOssConfig.class);
|
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"));
|
.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 缓存键key
|
||||||
|
*/
|
||||||
|
private String getCacheKey(String configKey) {
|
||||||
|
return CloudConstant.SYS_OSS_KEY + configKey;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@ import com.ruoyi.common.utils.PageUtils;
|
||||||
import com.ruoyi.common.utils.StringUtils;
|
import com.ruoyi.common.utils.StringUtils;
|
||||||
import com.ruoyi.oss.entity.UploadResult;
|
import com.ruoyi.oss.entity.UploadResult;
|
||||||
import com.ruoyi.oss.factory.OssFactory;
|
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.SysOss;
|
||||||
import com.ruoyi.system.domain.bo.SysOssBo;
|
import com.ruoyi.system.domain.bo.SysOssBo;
|
||||||
import com.ruoyi.system.domain.vo.SysOssVo;
|
import com.ruoyi.system.domain.vo.SysOssVo;
|
||||||
|
@ -56,7 +56,7 @@ public class SysOssServiceImpl extends ServicePlusImpl<SysOssMapper, SysOss, Sys
|
||||||
public SysOss upload(MultipartFile file) {
|
public SysOss upload(MultipartFile file) {
|
||||||
String originalfileName = file.getOriginalFilename();
|
String originalfileName = file.getOriginalFilename();
|
||||||
String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length());
|
String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length());
|
||||||
ICloudStorageService storage = OssFactory.instance();
|
ICloudStorageStrategy storage = OssFactory.instance();
|
||||||
UploadResult uploadResult;
|
UploadResult uploadResult;
|
||||||
try {
|
try {
|
||||||
uploadResult = storage.uploadSuffix(file.getBytes(), suffix, file.getContentType());
|
uploadResult = storage.uploadSuffix(file.getBytes(), suffix, file.getContentType());
|
||||||
|
@ -81,7 +81,7 @@ public class SysOssServiceImpl extends ServicePlusImpl<SysOssMapper, SysOss, Sys
|
||||||
}
|
}
|
||||||
List<SysOss> list = listByIds(ids);
|
List<SysOss> list = listByIds(ids);
|
||||||
for (SysOss sysOss : list) {
|
for (SysOss sysOss : list) {
|
||||||
ICloudStorageService storage = OssFactory.instance(sysOss.getService());
|
ICloudStorageStrategy storage = OssFactory.instance(sysOss.getService());
|
||||||
storage.delete(sysOss.getUrl());
|
storage.delete(sysOss.getUrl());
|
||||||
}
|
}
|
||||||
return removeByIds(ids);
|
return removeByIds(ids);
|
||||||
|
|
|
@ -158,15 +158,6 @@
|
||||||
<el-form-item label="域" prop="region">
|
<el-form-item label="域" prop="region">
|
||||||
<el-input v-model="form.region" placeholder="请输入域" />
|
<el-input v-model="form.region" placeholder="请输入域" />
|
||||||
</el-form-item>
|
</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-form-item label="备注" prop="remark">
|
||||||
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
|
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
|
@ -40,7 +40,6 @@ create table sys_oss_config (
|
||||||
primary key (oss_config_id)
|
primary key (oss_config_id)
|
||||||
) engine=innodb comment='云存储配置表';
|
) 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_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, '文件管理菜单');
|
insert into sys_menu values('118', '文件管理', '1', '10', 'oss', 'system/oss/index', 1, 0, 'C', '0', '0', 'system:oss:list', 'upload', 'admin', sysdate(), '', null, '文件管理菜单');
|
||||||
|
|
Loading…
Reference in New Issue