From 5fe6273e86a2fc9c58905025e1c5568acac326a5 Mon Sep 17 00:00:00 2001
From: smk <1193136099@qq.com>
Date: Sun, 6 Mar 2022 21:24:38 +0800
Subject: [PATCH 1/2] =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=AD=98=E5=82=A8?=
=?UTF-8?q?=E9=9B=86=E6=88=90minio?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../platform/controller/SysOssController.java | 8 +-
.../src/main/webapp/WEB-INF/page/sys/oss.html | 18 ++++
platform-admin/src/main/webapp/js/sys/oss.js | 14 ++++
platform-common/pom.xml | 6 ++
.../com/platform/oss/CloudStorageConfig.java | 50 +++++++++--
.../oss/MinioCloudStorageService.java | 82 +++++++++++++++++++
.../java/com/platform/oss/OSSFactory.java | 3 +-
.../java/com/platform/utils/Constant.java | 6 +-
.../platform/validator/group/MinioGroup.java | 11 +++
9 files changed, 186 insertions(+), 12 deletions(-)
create mode 100644 platform-common/src/main/java/com/platform/oss/MinioCloudStorageService.java
create mode 100644 platform-common/src/main/java/com/platform/validator/group/MinioGroup.java
diff --git a/platform-admin/src/main/java/com/platform/controller/SysOssController.java b/platform-admin/src/main/java/com/platform/controller/SysOssController.java
index 402072a6..0724c643 100644
--- a/platform-admin/src/main/java/com/platform/controller/SysOssController.java
+++ b/platform-admin/src/main/java/com/platform/controller/SysOssController.java
@@ -12,10 +12,7 @@ import com.platform.utils.PageUtilsPlus;
import com.platform.utils.R;
import com.platform.utils.RRException;
import com.platform.validator.ValidatorUtils;
-import com.platform.validator.group.AliyunGroup;
-import com.platform.validator.group.DiskGroup;
-import com.platform.validator.group.QcloudGroup;
-import com.platform.validator.group.QiniuGroup;
+import com.platform.validator.group.*;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
@@ -100,6 +97,9 @@ public class SysOssController {
} else if (config.getType() == Constant.CloudService.DISCK.getValue()) {
//校验腾讯云数据
ValidatorUtils.validateEntity(config, DiskGroup.class);
+ }else if (config.getType() == Constant.CloudService.MINIO.getValue()) {
+ //校验MINIO数据
+ ValidatorUtils.validateEntity(config, MinioGroup.class);
}
sysConfigService.updateValueByKey(KEY, JSON.toJSONString(config));
diff --git a/platform-admin/src/main/webapp/WEB-INF/page/sys/oss.html b/platform-admin/src/main/webapp/WEB-INF/page/sys/oss.html
index 925b7889..68d03034 100644
--- a/platform-admin/src/main/webapp/WEB-INF/page/sys/oss.html
+++ b/platform-admin/src/main/webapp/WEB-INF/page/sys/oss.html
@@ -39,6 +39,9 @@
七牛
+
+ MINIO
+
@@ -112,6 +115,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
提交
返回
diff --git a/platform-admin/src/main/webapp/js/sys/oss.js b/platform-admin/src/main/webapp/js/sys/oss.js
index 7534a9ff..26487b9c 100644
--- a/platform-admin/src/main/webapp/js/sys/oss.js
+++ b/platform-admin/src/main/webapp/js/sys/oss.js
@@ -86,6 +86,20 @@ var vm = new Vue({
proxyServer: [
{required: true, message: '本地存储代理服务器不能为空', trigger: 'blur'}
]
+ },
+ minioRuleValidate: {
+ minioUrl: [
+ {required: true, message: '代理地址不能为空', trigger: 'blur'}
+ ],
+ minioBucketName: [
+ {required: true, message: '存储桶不能为空', trigger: 'blur'}
+ ],
+ minioAccessKey: [
+ {required: true, message: '账号不能为空', trigger: 'blur'}
+ ],
+ minioSecretKey: [
+ {required: true, message: '密码不能为空', trigger: 'blur'}
+ ]
}
},
created: function () {
diff --git a/platform-common/pom.xml b/platform-common/pom.xml
index c129385d..52c04d5d 100644
--- a/platform-common/pom.xml
+++ b/platform-common/pom.xml
@@ -14,6 +14,7 @@
[7.2.0, 7.2.99]
3.9.1
5.6.9
+ 8.2.1
2.9.10
3.15
20180130
@@ -41,6 +42,11 @@
cos_api
${qcloud-cos-version}
+
+ io.minio
+ minio
+ ${minio-version}
+
diff --git a/platform-common/src/main/java/com/platform/oss/CloudStorageConfig.java b/platform-common/src/main/java/com/platform/oss/CloudStorageConfig.java
index b3a5e469..351078ff 100644
--- a/platform-common/src/main/java/com/platform/oss/CloudStorageConfig.java
+++ b/platform-common/src/main/java/com/platform/oss/CloudStorageConfig.java
@@ -1,9 +1,6 @@
package com.platform.oss;
-import com.platform.validator.group.AliyunGroup;
-import com.platform.validator.group.DiskGroup;
-import com.platform.validator.group.QcloudGroup;
-import com.platform.validator.group.QiniuGroup;
+import com.platform.validator.group.*;
import org.hibernate.validator.constraints.NotBlank;
import org.hibernate.validator.constraints.Range;
import org.hibernate.validator.constraints.URL;
@@ -21,8 +18,8 @@ import java.io.Serializable;
public class CloudStorageConfig implements Serializable {
private static final long serialVersionUID = 1L;
- //类型 1:七牛 2:阿里云 3:腾讯云 4:服务器存储
- @Range(min = 1, max = 4, message = "类型错误")
+ //类型 1:七牛 2:阿里云 3:腾讯云 4:服务器存储 5: MINIO
+ @Range(min = 1, max = 5, message = "类型错误")
private Integer type;
//七牛绑定的域名
@@ -88,6 +85,15 @@ public class CloudStorageConfig implements Serializable {
@NotBlank(message = "本地存储代理服务器不能为空", groups = DiskGroup.class)
private String proxyServer;
+ @NotBlank(message = "minio的AccessKey不能为空", groups = MinioGroup.class)
+ private String minioAccessKey;
+ @NotBlank(message = "minio的SecretKey不能为空", groups = MinioGroup.class)
+ private String minioSecretKey;
+ @NotBlank(message = "minio的Url不能为空", groups = MinioGroup.class)
+ private String minioUrl;
+ @NotBlank(message = "minio的BucketName不能为空", groups = MinioGroup.class)
+ private String minioBucketName;
+
public Integer getType() {
return type;
}
@@ -255,4 +261,36 @@ public class CloudStorageConfig implements Serializable {
public void setProxyServer(String proxyServer) {
this.proxyServer = proxyServer;
}
+
+ public String getMinioAccessKey() {
+ return minioAccessKey;
+ }
+
+ public void setMinioAccessKey(String minioAccessKey) {
+ this.minioAccessKey = minioAccessKey;
+ }
+
+ public String getMinioSecretKey() {
+ return minioSecretKey;
+ }
+
+ public void setMinioSecretKey(String minioSecretKey) {
+ this.minioSecretKey = minioSecretKey;
+ }
+
+ public String getMinioUrl() {
+ return minioUrl;
+ }
+
+ public void setMinioUrl(String minioUrl) {
+ this.minioUrl = minioUrl;
+ }
+
+ public String getMinioBucketName() {
+ return minioBucketName;
+ }
+
+ public void setMinioBucketName(String minioBucketName) {
+ this.minioBucketName = minioBucketName;
+ }
}
diff --git a/platform-common/src/main/java/com/platform/oss/MinioCloudStorageService.java b/platform-common/src/main/java/com/platform/oss/MinioCloudStorageService.java
new file mode 100644
index 00000000..e0918620
--- /dev/null
+++ b/platform-common/src/main/java/com/platform/oss/MinioCloudStorageService.java
@@ -0,0 +1,82 @@
+package com.platform.oss;
+
+import com.platform.utils.RRException;
+import io.minio.GetPresignedObjectUrlArgs;
+import io.minio.MinioClient;
+import io.minio.PutObjectArgs;
+import io.minio.http.Method;
+import org.apache.commons.io.IOUtils;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 服务器存储
+ *
+ * @author 沈明开
+ * @email 1193136099@qq.com
+ * @date 2022-03-06 16:21:01
+ */
+public class MinioCloudStorageService extends CloudStorageService {
+
+ private MinioClient minioClient;
+
+ public MinioCloudStorageService(CloudStorageConfig config) {
+ this.config = config;
+ //初始化
+ init();
+
+ }
+
+ private void init() {
+ minioClient = MinioClient.builder()
+ .endpoint(config.getMinioUrl())
+ .credentials(config.getMinioAccessKey(), config.getMinioSecretKey())
+ .build();
+ }
+
+ @Override
+ public String upload(MultipartFile file) throws Exception {
+ String fileName = file.getOriginalFilename();
+ String prefix = fileName.substring(fileName.lastIndexOf(".") + 1);
+ return upload(file.getBytes(), getPath("") + "." + prefix);
+ }
+
+ @Override
+ public String upload(byte[] data, String path) {
+ if (data.length < 3 || path.equals(""))
+ throw new RRException("上传文件为空");
+
+ try {
+ ByteArrayInputStream inputStream = new ByteArrayInputStream(data);
+ minioClient.putObject(PutObjectArgs.builder()
+ .bucket(config.getMinioBucketName())
+ .object(path)
+ .stream(inputStream, data.length, -1)
+ .contentType("image/png")
+ .build());
+ String url = minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder()
+ .method(Method.GET)
+ .bucket(config.getMinioBucketName())
+ .object(path)
+ .expiry(7, TimeUnit.DAYS).build());
+ return url.substring(0, url.lastIndexOf("?"));
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RRException("上传文件失败", e);
+ }
+ }
+
+ @Override
+ public String upload(InputStream inputStream, String path) {
+ try {
+ byte[] data = IOUtils.toByteArray(inputStream);
+ return this.upload(data, path);
+ } catch (IOException e) {
+ throw new RRException("上传文件失败", e);
+ }
+ }
+}
diff --git a/platform-common/src/main/java/com/platform/oss/OSSFactory.java b/platform-common/src/main/java/com/platform/oss/OSSFactory.java
index 9e37d1df..4f358165 100644
--- a/platform-common/src/main/java/com/platform/oss/OSSFactory.java
+++ b/platform-common/src/main/java/com/platform/oss/OSSFactory.java
@@ -30,8 +30,9 @@ public final class OSSFactory {
return new QcloudCloudStorageService(config);
} else if (config.getType() == Constant.CloudService.DISCK.getValue()) {
return new DiskCloudStorageService(config);
+ } else if (config.getType() == Constant.CloudService.MINIO.getValue()) {
+ return new MinioCloudStorageService(config);
}
-
return null;
}
diff --git a/platform-common/src/main/java/com/platform/utils/Constant.java b/platform-common/src/main/java/com/platform/utils/Constant.java
index 5c4fa398..814940ac 100644
--- a/platform-common/src/main/java/com/platform/utils/Constant.java
+++ b/platform-common/src/main/java/com/platform/utils/Constant.java
@@ -135,7 +135,11 @@ public class Constant {
/**
* 服务器存储
*/
- DISCK(4);
+ DISCK(4),
+ /**
+ * MINIO存储
+ */
+ MINIO(5);
private int value;
diff --git a/platform-common/src/main/java/com/platform/validator/group/MinioGroup.java b/platform-common/src/main/java/com/platform/validator/group/MinioGroup.java
new file mode 100644
index 00000000..c94be728
--- /dev/null
+++ b/platform-common/src/main/java/com/platform/validator/group/MinioGroup.java
@@ -0,0 +1,11 @@
+package com.platform.validator.group;
+
+/**
+ * minio服务器存储
+ *
+ * @author smk
+ * @email 1193136099@qq.com
+ * @date 20133-03-06 10:19
+ */
+public interface MinioGroup {
+}
--
Gitee
From 89bfe2fcb9676e8d01106bb8cbe42b5427e9bb42 Mon Sep 17 00:00:00 2001
From: lemoncute <1193136099@qq.com>
Date: Mon, 7 Mar 2022 09:29:09 +0000
Subject: [PATCH 2/2] update
platform-common/src/main/java/com/platform/oss/MinioCloudStorageService.java.
---
.../main/java/com/platform/oss/MinioCloudStorageService.java | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/platform-common/src/main/java/com/platform/oss/MinioCloudStorageService.java b/platform-common/src/main/java/com/platform/oss/MinioCloudStorageService.java
index e0918620..4ca7a235 100644
--- a/platform-common/src/main/java/com/platform/oss/MinioCloudStorageService.java
+++ b/platform-common/src/main/java/com/platform/oss/MinioCloudStorageService.java
@@ -56,9 +56,10 @@ public class MinioCloudStorageService extends CloudStorageService {
.bucket(config.getMinioBucketName())
.object(path)
.stream(inputStream, data.length, -1)
- .contentType("image/png")
+ .contentType("image/jpg")
.build());
- String url = minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder()
+ inputStream.close();
+ String url = minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder()
.method(Method.GET)
.bucket(config.getMinioBucketName())
.object(path)
--
Gitee