From 089e288a6e55d2ae527ad733bbb8b8b5eaad6107 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?=
<15040126243@163.com>
Date: Sun, 18 Jul 2021 18:20:21 +0800
Subject: [PATCH] =?UTF-8?q?update=20=E4=BD=BF=E7=94=A8=20=E7=AD=96?=
=?UTF-8?q?=E7=95=A5+=E5=B7=A5=E5=8E=82=20=E9=87=8D=E5=86=99OSS=E6=A8=A1?=
=?UTF-8?q?=E5=9D=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
ruoyi-oss/pom.xml | 4 +
.../ruoyi/oss/config/CloudStorageConfig.java | 69 ---------
.../com/ruoyi/oss/constant/CloudConstant.java | 39 +----
.../ruoyi/oss/enumd/CloudServiceEnumd.java | 36 +++++
.../com/ruoyi/oss/factory/OssFactory.java | 40 ++++++
.../oss/properties/AliyunProperties.java | 40 ++++++
.../properties/CloudStorageProperties.java | 25 ++++
.../ruoyi/oss/properties/MinioProperties.java | 40 ++++++
.../oss/properties/QcloudProperties.java | 45 ++++++
.../ruoyi/oss/properties/QiniuProperties.java | 40 ++++++
.../oss/service/ICloudStorageService.java | 10 ++
.../AbstractCloudStorageService.java | 47 ++++--
.../impl/AliyunCloudStorageServiceImpl.java | 54 +++++--
.../impl/MinioCloudStorageServiceImpl.java | 54 ++++---
.../impl/QcloudCloudStorageServiceImpl.java | 66 +++++----
.../impl/QiniuCloudStorageServiceImpl.java | 66 +++++----
.../java/com/ruoyi/oss/utils/DateUtils.java | 135 ------------------
.../system/controller/SysOssController.java | 52 ++++---
.../java/com/ruoyi/system/domain/SysOss.java | 31 +++-
.../com/ruoyi/system/factory/OSSFactory.java | 31 ----
.../com/ruoyi/system/mapper/SysOssMapper.java | 3 +-
.../ruoyi/system/service/ISysOssService.java | 16 +--
.../service/impl/SysOssServiceImpl.java | 54 ++++---
.../resources/mapper/system/SysOssMapper.xml | 25 ++--
ruoyi-oss/src/main/resources/sql/oss.sql | 30 ----
sql/oss.sql | 24 ++++
26 files changed, 602 insertions(+), 474 deletions(-)
delete mode 100644 ruoyi-oss/src/main/java/com/ruoyi/oss/config/CloudStorageConfig.java
create mode 100644 ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/CloudServiceEnumd.java
create mode 100644 ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java
create mode 100644 ruoyi-oss/src/main/java/com/ruoyi/oss/properties/AliyunProperties.java
create mode 100644 ruoyi-oss/src/main/java/com/ruoyi/oss/properties/CloudStorageProperties.java
create mode 100644 ruoyi-oss/src/main/java/com/ruoyi/oss/properties/MinioProperties.java
create mode 100644 ruoyi-oss/src/main/java/com/ruoyi/oss/properties/QcloudProperties.java
create mode 100644 ruoyi-oss/src/main/java/com/ruoyi/oss/properties/QiniuProperties.java
delete mode 100644 ruoyi-oss/src/main/java/com/ruoyi/oss/utils/DateUtils.java
delete mode 100644 ruoyi-oss/src/main/java/com/ruoyi/system/factory/OSSFactory.java
delete mode 100644 ruoyi-oss/src/main/resources/sql/oss.sql
create mode 100644 sql/oss.sql
diff --git a/ruoyi-oss/pom.xml b/ruoyi-oss/pom.xml
index ad8197c1..9d9fe211 100644
--- a/ruoyi-oss/pom.xml
+++ b/ruoyi-oss/pom.xml
@@ -22,6 +22,10 @@
com.ruoyi
ruoyi-common
+
+ com.ruoyi
+ ruoyi-system
+
com.qiniu
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/config/CloudStorageConfig.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/config/CloudStorageConfig.java
deleted file mode 100644
index c0f7ee9d..00000000
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/config/CloudStorageConfig.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package com.ruoyi.oss.config;
-
-import lombok.Data;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.context.annotation.Configuration;
-
-import java.io.Serializable;
-
-/**
- * 云存储配置信息
- */
-@Data
-@Configuration
-@ConfigurationProperties(prefix = "cloud-storage")
-public class CloudStorageConfig implements Serializable {
-
- private static final long serialVersionUID = 1L;
-
- /**
- * 类型 1:七牛 2:阿里云 3:腾讯云 4: minio
- */
- private Integer type;
-
- /**
- * 七牛绑定的域名
- */
- private String domain;
-
- /**
- * 七牛路径前缀
- */
- private String prefix;
-
- /**
- * 七牛ACCESS_KEY
- */
- private String accessKey;
-
- /**
- * 七牛SECRET_KEY
- */
- private String secretKey;
-
- /**
- * 七牛存储空间名
- */
- private String bucketName;
-
- /**
- * 腾讯云AppId
- */
- private Integer qcloudAppId;
-
- /**
- * 腾讯云SecretId
- */
- private String qcloudSecretId;
-
- /**
- * 腾讯云SecretKey
- */
- private String qcloudSecretKey;
-
- /**
- * 腾讯云COS所属地区
- */
- private String qcloudRegion;
-
-}
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 ac4dff55..fcb2ef8b 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,43 +1,16 @@
package com.ruoyi.oss.constant;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-
+/**
+ * 云存储常量
+ *
+ * @author Lion Li
+ */
public class CloudConstant {
/**
* 云存储配置KEY
*/
- public final static String CLOUD_STORAGE_CONFIG_KEY = "sys.oss.cloud-storage";
+ public final static String CLOUD_STORAGE_CONFIG_KEY = "sys.oss.cloudStorageService";
- /**
- * 云服务商
- */
- @Getter
- @AllArgsConstructor
- public enum CloudService {
- /**
- * 七牛云
- */
- QINIU(1),
-
- /**
- * 阿里云
- */
- ALIYUN(2),
-
- /**
- * 腾讯云
- */
- QCLOUD(3),
-
- /**
- * minio
- */
- MINIO(4);
-
- private final int value;
- }
}
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
new file mode 100644
index 00000000..56e09064
--- /dev/null
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/CloudServiceEnumd.java
@@ -0,0 +1,36 @@
+package com.ruoyi.oss.enumd;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 云存储服务商枚举
+ *
+ * @author LionLi
+ */
+@Getter
+@AllArgsConstructor
+public enum CloudServiceEnumd {
+
+ /**
+ * 七牛云
+ */
+ QINIU("qiniu"),
+
+ /**
+ * 阿里云
+ */
+ ALIYUN("aliyun"),
+
+ /**
+ * 腾讯云
+ */
+ QCLOUD("qcloud"),
+
+ /**
+ * minio
+ */
+ MINIO("minio");
+
+ private final String value;
+}
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
new file mode 100644
index 00000000..b549d218
--- /dev/null
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java
@@ -0,0 +1,40 @@
+package com.ruoyi.oss.factory;
+
+import cn.hutool.core.lang.Assert;
+import com.ruoyi.common.utils.spring.SpringUtils;
+import com.ruoyi.oss.constant.CloudConstant;
+import com.ruoyi.oss.service.ICloudStorageService;
+import com.ruoyi.system.service.ISysConfigService;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * 文件上传Factory
+ *
+ * @author Lion Li
+ */
+public class OssFactory {
+
+ private static ISysConfigService sysConfigService;
+
+ static {
+ OssFactory.sysConfigService = SpringUtils.getBean(ISysConfigService.class);
+ }
+
+ private static final Map SERVICES = new ConcurrentHashMap<>();
+
+ public static ICloudStorageService instance() {
+ String type = sysConfigService.selectConfigByKey(CloudConstant.CLOUD_STORAGE_CONFIG_KEY);
+ return SERVICES.get(type);
+ }
+
+ public static ICloudStorageService instance(String type) {
+ return SERVICES.get(type);
+ }
+
+ public static void register(String type, ICloudStorageService iCloudStorageService) {
+ Assert.notNull(type, "type can't be null");
+ SERVICES.put(type, iCloudStorageService);
+ }
+}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/AliyunProperties.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/AliyunProperties.java
new file mode 100644
index 00000000..b642f9cc
--- /dev/null
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/AliyunProperties.java
@@ -0,0 +1,40 @@
+package com.ruoyi.oss.properties;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 阿里云 配置属性
+ *
+ * @author Lion Li
+ */
+@Data
+@NoArgsConstructor
+public class AliyunProperties {
+
+ /**
+ * 阿里云绑定的域名
+ */
+ private String endpoint;
+
+ /**
+ * 阿里云路径前缀
+ */
+ private String prefix;
+
+ /**
+ * 阿里云AccessKeyId
+ */
+ private String accessKeyId;
+
+ /**
+ * 阿里云AccessKeySecret
+ */
+ private String accessKeySecret;
+
+ /**
+ * 阿里云BucketName
+ */
+ private String bucketName;
+
+}
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
new file mode 100644
index 00000000..b8c38c11
--- /dev/null
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/CloudStorageProperties.java
@@ -0,0 +1,25 @@
+package com.ruoyi.oss.properties;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * OSS云存储 配置属性
+ *
+ * @author Lion Li
+ */
+@Data
+@Component
+@ConfigurationProperties(prefix = "cloud-storage")
+public class CloudStorageProperties {
+
+ private QiniuProperties qiniu;
+
+ private AliyunProperties aliyun;
+
+ private QcloudProperties qcloud;
+
+ private MinioProperties minio;
+
+}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/MinioProperties.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/MinioProperties.java
new file mode 100644
index 00000000..94313d45
--- /dev/null
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/MinioProperties.java
@@ -0,0 +1,40 @@
+package com.ruoyi.oss.properties;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * Minio 配置属性
+ *
+ * @author Lion Li
+ */
+@Data
+@NoArgsConstructor
+public class MinioProperties {
+
+ /**
+ * 七牛绑定的域名
+ */
+ private String endpoint;
+
+ /**
+ * 七牛路径前缀
+ */
+ private String prefix;
+
+ /**
+ * 七牛ACCESS_KEY
+ */
+ private String accessKey;
+
+ /**
+ * 七牛SECRET_KEY
+ */
+ private String secretKey;
+
+ /**
+ * 七牛存储空间名
+ */
+ private String bucketName;
+
+}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/QcloudProperties.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/QcloudProperties.java
new file mode 100644
index 00000000..c6d17d9a
--- /dev/null
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/QcloudProperties.java
@@ -0,0 +1,45 @@
+package com.ruoyi.oss.properties;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 腾讯云COS 配置属性
+ *
+ * @author Lion Li
+ */
+@Data
+@NoArgsConstructor
+public class QcloudProperties {
+
+ /**
+ * 腾讯云绑定的域名
+ */
+ private String domain;
+
+ /**
+ * 腾讯云路径前缀
+ */
+ private String prefix;
+
+ /**
+ * 腾讯云SecretId
+ */
+ private String secretId;
+
+ /**
+ * 腾讯云SecretKey
+ */
+ private String secretKey;
+
+ /**
+ * 腾讯云BucketName
+ */
+ private String bucketName;
+
+ /**
+ * 腾讯云COS所属地区
+ */
+ private String region;
+
+}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/QiniuProperties.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/QiniuProperties.java
new file mode 100644
index 00000000..f671c5ab
--- /dev/null
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/QiniuProperties.java
@@ -0,0 +1,40 @@
+package com.ruoyi.oss.properties;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 七牛云 配置属性
+ *
+ * @author Lion Li
+ */
+@Data
+@NoArgsConstructor
+public class QiniuProperties {
+
+ /**
+ * 七牛绑定的域名
+ */
+ private String domain;
+
+ /**
+ * 七牛路径前缀
+ */
+ private String prefix;
+
+ /**
+ * 七牛ACCESS_KEY
+ */
+ private String accessKey;
+
+ /**
+ * 七牛SECRET_KEY
+ */
+ private String secretKey;
+
+ /**
+ * 七牛存储空间名
+ */
+ private String bucketName;
+
+}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageService.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageService.java
index 19d623ac..a6a29c7c 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageService.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageService.java
@@ -2,8 +2,18 @@ package com.ruoyi.oss.service;
import java.io.InputStream;
+/**
+ * 云存储服务接口
+ *
+ * @author Lion Li
+ */
public interface ICloudStorageService {
+ /**
+ * 获取服务商类型
+ */
+ String getServiceType();
+
/**
* 文件路径
*
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/AbstractCloudStorageService.java
index cbdbd93f..a154670e 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/AbstractCloudStorageService.java
@@ -1,36 +1,55 @@
package com.ruoyi.oss.service.abstractd;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.io.IoUtil;
+import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
-import com.ruoyi.oss.config.CloudStorageConfig;
import com.ruoyi.oss.service.ICloudStorageService;
-import com.ruoyi.oss.utils.DateUtils;
+import org.springframework.beans.factory.InitializingBean;
-import java.util.UUID;
+import java.io.InputStream;
+import java.util.Date;
/**
* 云存储(支持七牛、阿里云、腾讯云、minio)
+ *
+ * @author Lion Li
*/
-public abstract class AbstractCloudStorageService implements ICloudStorageService {
+public abstract class AbstractCloudStorageService implements ICloudStorageService, InitializingBean {
- /**
- * 云存储配置信息
- */
- protected CloudStorageConfig config;
-
- public int getServiceType() {
- return config.getType();
- }
+ @Override
+ public abstract String getServiceType();
@Override
public String getPath(String prefix, String suffix) {
// 生成uuid
- String uuid = UUID.randomUUID().toString().replaceAll("-", "");
+ String uuid = IdUtil.fastSimpleUUID();
// 文件路径
- String path = DateUtils.dateTime() + "/" + uuid;
+ String path = DateUtil.format(new Date(), "yyyyMMdd") + "/" + uuid;
if (StrUtil.isNotBlank(prefix)) {
path = prefix + "/" + path;
}
return path + suffix;
}
+ @Override
+ public abstract String upload(byte[] data, String path);
+
+ @Override
+ public abstract void delete(String path);
+
+ @Override
+ public String upload(InputStream inputStream, String path) {
+ byte[] data = IoUtil.readBytes(inputStream);
+ return this.upload(data, path);
+ }
+
+ @Override
+ public abstract String uploadSuffix(byte[] data, String suffix);
+
+ @Override
+ public abstract String uploadSuffix(InputStream inputStream, String suffix);
+
+ @Override
+ public abstract void afterPropertiesSet() throws Exception;
}
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/AliyunCloudStorageServiceImpl.java
index 8fbe16c2..a0782fee 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/AliyunCloudStorageServiceImpl.java
@@ -1,28 +1,47 @@
package com.ruoyi.oss.service.impl;
+import com.aliyun.oss.ClientConfiguration;
import com.aliyun.oss.OSSClient;
-import com.ruoyi.oss.config.CloudStorageConfig;
+import com.aliyun.oss.common.auth.DefaultCredentialProvider;
+import com.ruoyi.oss.enumd.CloudServiceEnumd;
import com.ruoyi.oss.exception.OssException;
+import com.ruoyi.oss.factory.OssFactory;
+import com.ruoyi.oss.properties.AliyunProperties;
+import com.ruoyi.oss.properties.CloudStorageProperties;
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.InputStream;
/**
* 阿里云存储
+ *
+ * @author Lion Li
*/
-public class AliyunCloudStorageServiceImpl extends AbstractCloudStorageService {
+@Lazy
+@Service
+public class AliyunCloudStorageServiceImpl extends AbstractCloudStorageService implements InitializingBean {
- private OSSClient client;
+ private final OSSClient client;
+ private final AliyunProperties properties;
- public AliyunCloudStorageServiceImpl(CloudStorageConfig config) {
- this.config = config;
- // 初始化
- init();
+ @Autowired
+ public AliyunCloudStorageServiceImpl(CloudStorageProperties properties) {
+ this.properties = properties.getAliyun();
+ ClientConfiguration configuration = new ClientConfiguration();
+ DefaultCredentialProvider credentialProvider = new DefaultCredentialProvider(
+ this.properties.getAccessKeyId(),
+ this.properties.getAccessKeySecret());
+ client = new OSSClient(this.properties.getEndpoint(), credentialProvider, configuration);
}
- private void init() {
- client = new OSSClient(config.getDomain(), config.getAccessKey(), config.getSecretKey());
+ @Override
+ public String getServiceType() {
+ return CloudServiceEnumd.ALIYUN.getValue();
}
@Override
@@ -33,18 +52,18 @@ public class AliyunCloudStorageServiceImpl extends AbstractCloudStorageService {
@Override
public String upload(InputStream inputStream, String path) {
try {
- client.putObject(config.getBucketName(), path, inputStream);
+ client.putObject(this.properties.getBucketName(), path, inputStream);
} catch (Exception e) {
throw new OssException("上传文件失败,请检查配置信息");
}
- return config.getDomain() + "/" + path;
+ return this.properties.getEndpoint() + "/" + path;
}
@Override
public void delete(String path) {
- path = path.replace(config.getDomain() + "/", "");
+ path = path.replace(this.properties.getEndpoint() + "/", "");
try {
- client.deleteObject(config.getBucketName(), path);
+ client.deleteObject(this.properties.getBucketName(), path);
} catch (Exception e) {
throw new OssException("上传文件失败,请检查配置信息");
}
@@ -52,11 +71,16 @@ public class AliyunCloudStorageServiceImpl extends AbstractCloudStorageService {
@Override
public String uploadSuffix(byte[] data, String suffix) {
- return upload(data, getPath(config.getPrefix(), suffix));
+ return upload(data, getPath(this.properties.getPrefix(), suffix));
}
@Override
public String uploadSuffix(InputStream inputStream, String suffix) {
- return upload(inputStream, getPath(config.getPrefix(), suffix));
+ return upload(inputStream, getPath(this.properties.getPrefix(), suffix));
+ }
+
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ OssFactory.register(getServiceType(),this);
}
}
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/MinioCloudStorageServiceImpl.java
index bf02831d..480f5e9e 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/MinioCloudStorageServiceImpl.java
@@ -1,31 +1,43 @@
package com.ruoyi.oss.service.impl;
-import cn.hutool.core.io.IoUtil;
-import com.ruoyi.oss.config.CloudStorageConfig;
+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.MinioProperties;
import com.ruoyi.oss.service.abstractd.AbstractCloudStorageService;
import io.minio.MinioClient;
+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;
/**
* minio存储
+ *
+ * @author Lion Li
*/
-public class MinioCloudStorageServiceImpl extends AbstractCloudStorageService {
+@Lazy
+@Service
+public class MinioCloudStorageServiceImpl extends AbstractCloudStorageService implements InitializingBean {
- private MinioClient minioClient;
+ private final MinioClient minioClient;
+ private final MinioProperties properties;
- public MinioCloudStorageServiceImpl(CloudStorageConfig config) {
- this.config = config;
- // 初始化
- init();
+ @Autowired
+ public MinioCloudStorageServiceImpl(CloudStorageProperties properties) {
+ this.properties = properties.getMinio();
+ minioClient = MinioClient.builder()
+ .endpoint(this.properties.getEndpoint())
+ .credentials(this.properties.getAccessKey(), this.properties.getSecretKey())
+ .build();
}
- private void init() {
- minioClient = MinioClient.builder()
- .endpoint(config.getDomain())
- .credentials(config.getAccessKey(), config.getSecretKey())
- .build();
+ @Override
+ public String getServiceType() {
+ return CloudServiceEnumd.MINIO.getValue();
}
@Override
@@ -35,7 +47,7 @@ public class MinioCloudStorageServiceImpl extends AbstractCloudStorageService {
} catch (Exception e) {
throw new OssException("上传文件失败,请核对Minio配置信息");
}
- return config.getDomain() + "/" + path;
+ return this.properties.getEndpoint() + "/" + path;
}
@Override
@@ -47,20 +59,18 @@ public class MinioCloudStorageServiceImpl extends AbstractCloudStorageService {
}
}
- @Override
- public String upload(InputStream inputStream, String path) {
- byte[] data = IoUtil.readBytes(inputStream);
- return this.upload(data, path);
- }
-
@Override
public String uploadSuffix(byte[] data, String suffix) {
- return upload(data, getPath(config.getPrefix(), suffix));
+ return upload(data, getPath(this.properties.getPrefix(), suffix));
}
@Override
public String uploadSuffix(InputStream inputStream, String suffix) {
- return upload(inputStream, getPath(config.getPrefix(), suffix));
+ return upload(inputStream, getPath(this.properties.getPrefix(), suffix));
}
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ OssFactory.register(getServiceType(),this);
+ }
}
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/QcloudCloudStorageServiceImpl.java
index 66813101..4cc7bf21 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/QcloudCloudStorageServiceImpl.java
@@ -1,33 +1,50 @@
package com.ruoyi.oss.service.impl;
-import cn.hutool.core.io.IoUtil;
import com.qcloud.cos.COSClient;
-import com.ruoyi.oss.config.CloudStorageConfig;
+import com.qcloud.cos.ClientConfig;
+import com.qcloud.cos.auth.BasicCOSCredentials;
+import com.qcloud.cos.auth.COSCredentials;
+import com.qcloud.cos.region.Region;
+import com.ruoyi.oss.enumd.CloudServiceEnumd;
+import com.ruoyi.oss.factory.OssFactory;
+import com.ruoyi.oss.properties.CloudStorageProperties;
+import com.ruoyi.oss.properties.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 java.io.InputStream;
/**
* 腾讯云存储
+ *
+ * @author Lion Li
*/
-public class QcloudCloudStorageServiceImpl extends AbstractCloudStorageService {
+@Lazy
+@Service
+public class QcloudCloudStorageServiceImpl extends AbstractCloudStorageService implements InitializingBean {
- private COSClient client;
+ private final COSClient client;
+ private final QcloudProperties properties;
- public QcloudCloudStorageServiceImpl(CloudStorageConfig config) {
- this.config = config;
- // 初始化
- init();
+ @Autowired
+ public QcloudCloudStorageServiceImpl(CloudStorageProperties properties) {
+ this.properties = properties.getQcloud();
+ COSCredentials credentials = new BasicCOSCredentials(
+ this.properties.getSecretId(),
+ this.properties.getSecretKey());
+ // 初始化客户端配置
+ ClientConfig clientConfig = new ClientConfig();
+ // 设置bucket所在的区域,华南:gz 华北:tj 华东:sh
+ clientConfig.setRegion(new Region(this.properties.getRegion()));
+ client = new COSClient(credentials, clientConfig);
}
- private void init() {
-// Credentials credentials = new Credentials(config.getQcloudAppId(), config.getQcloudSecretId(),
-// config.getQcloudSecretKey());
-// 初始化客户端配置
-// ClientConfig clientConfig = new ClientConfig();
-// // 设置bucket所在的区域,华南:gz 华北:tj 华东:sh
-// clientConfig.setRegion(config.getQcloudRegion());
-// client = new COSClient(clientConfig, credentials);
+ @Override
+ public String getServiceType() {
+ return CloudServiceEnumd.QCLOUD.getValue();
}
@Override
@@ -43,7 +60,7 @@ public class QcloudCloudStorageServiceImpl extends AbstractCloudStorageService {
// if (Convert.toInt(jsonObject.get("code")) != 0) {
// throw new OssException("文件上传失败," + Convert.toStr(jsonObject.get("message")));
// }
- return config.getDomain() + path;
+ return this.properties.getDomain() + path;
}
@Override
@@ -57,21 +74,18 @@ public class QcloudCloudStorageServiceImpl extends AbstractCloudStorageService {
// }
}
-
- @Override
- public String upload(InputStream inputStream, String path) {
- byte[] data = IoUtil.readBytes(inputStream);
- return this.upload(data, path);
- }
-
@Override
public String uploadSuffix(byte[] data, String suffix) {
- return upload(data, getPath(config.getPrefix(), suffix));
+ return upload(data, getPath(this.properties.getPrefix(), suffix));
}
@Override
public String uploadSuffix(InputStream inputStream, String suffix) {
- return upload(inputStream, getPath(config.getPrefix(), suffix));
+ return upload(inputStream, getPath(this.properties.getPrefix(), suffix));
}
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ OssFactory.register(getServiceType(),this);
+ }
}
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/QiniuCloudStorageServiceImpl.java
index 97a493f7..a8c93939 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/QiniuCloudStorageServiceImpl.java
@@ -1,44 +1,59 @@
package com.ruoyi.oss.service.impl;
-import cn.hutool.core.io.IoUtil;
import com.qiniu.http.Response;
import com.qiniu.storage.BucketManager;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;
-import com.ruoyi.oss.config.CloudStorageConfig;
+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.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 java.io.InputStream;
/**
* 七牛云存储
+ *
+ * @author Lion Li
*/
-public class QiniuCloudStorageServiceImpl extends AbstractCloudStorageService {
+@Lazy
+@Service
+public class QiniuCloudStorageServiceImpl extends AbstractCloudStorageService implements InitializingBean {
- private UploadManager uploadManager;
- private BucketManager bucketManager;
- private String token;
+ private final UploadManager uploadManager;
+ private final BucketManager bucketManager;
+ private final String token;
+ private final QiniuProperties properties;
- public QiniuCloudStorageServiceImpl(CloudStorageConfig config) {
- this.config = config;
- // 初始化
- init();
- }
-
- private void init() {
+ @Autowired
+ public QiniuCloudStorageServiceImpl(CloudStorageProperties properties) {
+ this.properties = properties.getQiniu();
// z0 z1 z2
Configuration config = new Configuration(Region.autoRegion());
// 默认不使用https
config.useHttpsDomains = false;
uploadManager = new UploadManager(config);
- Auth auth = Auth.create(this.config.getAccessKey(), this.config.getSecretKey());
- token = auth.uploadToken(this.config.getBucketName());
+ Auth auth = Auth.create(
+ this.properties.getAccessKey(),
+ this.properties.getSecretKey());
+ token = auth.uploadToken(this.properties.getBucketName());
bucketManager = new BucketManager(auth, config);
}
+
+ @Override
+ public String getServiceType() {
+ return CloudServiceEnumd.QINIU.getValue();
+ }
+
@Override
public String upload(byte[] data, String path) {
try {
@@ -49,14 +64,14 @@ public class QiniuCloudStorageServiceImpl extends AbstractCloudStorageService {
} catch (Exception e) {
throw new OssException("上传文件失败,请核对七牛配置信息");
}
- return config.getDomain() + "/" + path;
+ return this.properties.getDomain() + "/" + path;
}
@Override
public void delete(String path) {
try {
- path = path.replace(config.getDomain() + "/", "");
- Response res = bucketManager.delete(config.getBucketName(), path);
+ path = path.replace(this.properties.getDomain() + "/", "");
+ Response res = bucketManager.delete(this.properties.getBucketName(), path);
if (!res.isOK()) {
throw new RuntimeException("删除七牛文件出错:" + res.toString());
}
@@ -65,20 +80,19 @@ public class QiniuCloudStorageServiceImpl extends AbstractCloudStorageService {
}
}
- @Override
- public String upload(InputStream inputStream, String path) {
- byte[] data = IoUtil.readBytes(inputStream);
- return this.upload(data, path);
- }
-
@Override
public String uploadSuffix(byte[] data, String suffix) {
- return upload(data, getPath(config.getPrefix(), suffix));
+ return upload(data, getPath(this.properties.getPrefix(), suffix));
}
@Override
public String uploadSuffix(InputStream inputStream, String suffix) {
- return upload(inputStream, getPath(config.getPrefix(), suffix));
+ return upload(inputStream, getPath(this.properties.getPrefix(), suffix));
+ }
+
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ OssFactory.register(getServiceType(),this);
}
}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/utils/DateUtils.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/utils/DateUtils.java
deleted file mode 100644
index eac88e8f..00000000
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/utils/DateUtils.java
+++ /dev/null
@@ -1,135 +0,0 @@
-package com.ruoyi.oss.utils;
-
-import org.apache.commons.lang3.time.DateFormatUtils;
-
-import java.lang.management.ManagementFactory;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-/**
- * 时间工具类
- *
- * @author ruoyi
- */
-public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
- public static String YYYY = "yyyy";
-
- public static String YYYY_MM = "yyyy-MM";
-
- public static String YYYY_MM_DD = "yyyy-MM-dd";
-
- public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
-
- public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
-
- private static String[] parsePatterns = {
- "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
- "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
- "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
-
- /**
- * 获取当前Date型日期
- *
- * @return Date() 当前日期
- */
- public static Date getNowDate() {
- return new Date();
- }
-
- /**
- * 获取当前日期, 默认格式为yyyy-MM-dd
- *
- * @return String
- */
- public static String getDate() {
- return dateTimeNow(YYYY_MM_DD);
- }
-
- public static final String getTime() {
- return dateTimeNow(YYYY_MM_DD_HH_MM_SS);
- }
-
- public static final String dateTimeNow() {
- return dateTimeNow(YYYYMMDDHHMMSS);
- }
-
- public static final String dateTimeNow(final String format) {
- return parseDateToStr(format, new Date());
- }
-
- public static final String dateTime(final Date date) {
- return parseDateToStr(YYYY_MM_DD, date);
- }
-
- public static final String parseDateToStr(final String format, final Date date) {
- return new SimpleDateFormat(format).format(date);
- }
-
- public static final Date dateTime(final String format, final String ts) {
- try {
- return new SimpleDateFormat(format).parse(ts);
- } catch (ParseException e) {
- throw new RuntimeException(e);
- }
- }
-
- /**
- * 日期路径 即年/月/日 如2018/08/08
- */
- public static final String datePath() {
- Date now = new Date();
- return DateFormatUtils.format(now, "yyyy/MM/dd");
- }
-
- /**
- * 日期路径 即年/月/日 如20180808
- */
- public static final String dateTime() {
- Date now = new Date();
- return DateFormatUtils.format(now, "yyyyMMdd");
- }
-
- /**
- * 日期型字符串转化为日期 格式
- */
- public static Date parseDate(Object str) {
- if (str == null) {
- return null;
- }
- try {
- return parseDate(str.toString(), parsePatterns);
- } catch (ParseException e) {
- return null;
- }
- }
-
- /**
- * 获取服务器启动时间
- */
- public static Date getServerStartDate() {
- long time = ManagementFactory.getRuntimeMXBean().getStartTime();
- return new Date(time);
- }
-
- /**
- * 计算两个时间差
- */
- public static String getDatePoor(Date endDate, Date nowDate) {
- long nd = 1000 * 24 * 60 * 60;
- long nh = 1000 * 60 * 60;
- long nm = 1000 * 60;
- // long ns = 1000;
- // 获得两个时间的毫秒时间差异
- long diff = endDate.getTime() - nowDate.getTime();
- // 计算差多少天
- long day = diff / nd;
- // 计算差多少小时
- long hour = diff % nd / nh;
- // 计算差多少分钟
- long min = diff % nd % nh / nm;
- // 计算差多少秒//输出结果
- // long sec = diff % nd % nh % nm / ns;
- return day + "天" + hour + "小时" + min + "分钟";
- }
-}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/system/controller/SysOssController.java b/ruoyi-oss/src/main/java/com/ruoyi/system/controller/SysOssController.java
index 28cea034..a629626b 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/system/controller/SysOssController.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/system/controller/SysOssController.java
@@ -1,58 +1,74 @@
package com.ruoyi.system.controller;
-import com.aliyun.oss.ServiceException;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.annotation.RepeatSubmit;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.exception.CustomException;
-import com.ruoyi.common.utils.PageUtils;
-import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.domain.SysOss;
import com.ruoyi.system.service.ISysOssService;
-import lombok.extern.slf4j.Slf4j;
+import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.ModelMap;
+import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
-import java.util.List;
+import javax.validation.constraints.NotEmpty;
+import java.util.Arrays;
+import java.util.HashMap;
import java.util.Map;
/**
* 文件上传 控制层
*
- * @author chkj
- * @date 2019-07-15
+ * @author Lion Li
*/
-@Slf4j
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
@RestController
@RequestMapping("/system/oss")
public class SysOssController extends BaseController {
- @Autowired
- private ISysOssService iSysOssService;
+ private final ISysOssService iSysOssService;
/**
* 查询文件上传列表
*/
+ @PreAuthorize("@ss.hasPermi('system:oss:list')")
@GetMapping("/list")
- public TableDataInfo list(SysOss sysOss) {
- List list = iSysOssService.list(sysOss);
- return PageUtils.buildDataInfo(list);
+ public TableDataInfo list(SysOss sysOss) {
+ return iSysOssService.queryPageList(sysOss);
}
/**
* 上传图片
*/
+ @PreAuthorize("@ss.hasPermi('system:oss:upload')")
+ @Log(title = "OSS云存储", businessType = BusinessType.INSERT)
+ @RepeatSubmit
@PostMapping("/upload")
- public AjaxResult upload(@RequestParam("file") MultipartFile file) {
+ public AjaxResult