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