From 7f21d4f22ec711d6aa89900b07e0b5ac31dbac42 Mon Sep 17 00:00:00 2001
From: Administrator <1144154118@qq.com>
Date: 星期五, 25 八月 2023 17:15:04 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ard-work/src/main/java/com/ruoyi/utils/minio/MinioUtil.java |  248 ++++++++++++++++++++++++++-----------------------
 1 files changed, 133 insertions(+), 115 deletions(-)

diff --git a/ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioUtils.java b/ard-work/src/main/java/com/ruoyi/utils/minio/MinioUtil.java
similarity index 75%
rename from ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioUtils.java
rename to ard-work/src/main/java/com/ruoyi/utils/minio/MinioUtil.java
index 7cbcec6..62b93d6 100644
--- a/ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioUtils.java
+++ b/ard-work/src/main/java/com/ruoyi/utils/minio/MinioUtil.java
@@ -1,4 +1,4 @@
-package com.ruoyi.storage.minio.utils;
+package com.ruoyi.utils.minio;
 
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.uuid.IdUtils;
@@ -6,39 +6,70 @@
 import io.minio.http.Method;
 import io.minio.messages.*;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Component;
 import org.springframework.web.multipart.MultipartFile;
 
-import javax.annotation.Resource;
-import java.io.*;
-import java.util.*;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
 import java.util.concurrent.TimeUnit;
 
 /**
- * @Description: Minio瀹㈡埛绔伐鍏风被
- * @ClassName: MinioUtils
+ * @Description: minio宸ュ叿绫�
+ * @ClassName: MinioUtil
  * @Author: 鍒樿嫃涔�
- * @Date: 2023骞�05鏈�18鏃�9:34
- * @Version: 1.0
+ * @Date: 2023骞�08鏈�25鏃�14:03:00
  **/
-@SuppressWarnings("ALL")
 @Slf4j(topic = "minio")
-@Component
-public class MinioUtils {
+public class MinioUtil {
 
-    @Resource
-    MinioClient minioClient;
+    private volatile static MinioClient minioClient;
+    public static String domainUrl;
+    public static String accessKey;
+    public static String secretKey;
+
+    private MinioUtil() {
+    }
+
+    public MinioUtil(String domainUrl, String accessKey, String secretKey) {
+        this.domainUrl = domainUrl;
+        this.accessKey = accessKey;
+        this.secretKey = secretKey;
+        creatMinioClient();
+    }
+
+    /**
+     * 鑾峰彇minio瀹㈡埛绔疄渚�
+     *
+     * @return {@link MinioClient}
+     */
+    public static MinioClient creatMinioClient() {
+        if (minioClient == null) {
+            synchronized (MinioUtil.class) {
+                if (minioClient == null) {
+                    minioClient = MinioClient.builder()
+                            .endpoint(domainUrl)
+                            .credentials(accessKey, secretKey)
+                            .build();
+                }
+            }
+        }
+        return minioClient;
+    }
 
     /**
      * 鍒ゆ柇妗舵槸鍚﹀瓨鍦�
      */
-    public boolean exitsBucket(String bucketName) {
+    public static boolean exitsBucket(String bucket) {
         boolean found = false;
         try {
-            if (StringUtils.isEmpty(bucketName)) {
+            if (StringUtils.isEmpty(bucket)) {
                 return false;
             }
-            BucketExistsArgs bucketExistsArgs = BucketExistsArgs.builder().bucket(bucketName).build();
+            BucketExistsArgs bucketExistsArgs = BucketExistsArgs.builder().bucket(bucket).build();
             found = minioClient.bucketExists(bucketExistsArgs);
 
         } catch (Exception ex) {
@@ -50,23 +81,23 @@
     /**
      * 鍒涘缓妗�,骞惰缃《绛栫暐涓哄叕鍏�
      */
-    public boolean createBucket(String bucketName) {
+    public static boolean createBucket(String bucket) {
         try {
-            if (StringUtils.isEmpty(bucketName)) {
+            if (StringUtils.isEmpty(bucket)) {
                 return false;
             }
             /*鍒涘缓妗�*/
-            MakeBucketArgs makeBucketArgs = MakeBucketArgs.builder().bucket(bucketName).build();
+            MakeBucketArgs makeBucketArgs = MakeBucketArgs.builder().bucket(bucket).build();
             minioClient.makeBucket(makeBucketArgs);
             /*璁剧疆绛栫暐*/
             String sb = "{\"Version\":\"2012-10-17\"," +
                     "\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":" +
                     "{\"AWS\":[\"*\"]},\"Action\":[\"s3:ListBucket\",\"s3:ListBucketMultipartUploads\"," +
-                    "\"s3:GetBucketLocation\"],\"Resource\":[\"arn:aws:s3:::" + bucketName +
+                    "\"s3:GetBucketLocation\"],\"Resource\":[\"arn:aws:s3:::" + bucket +
                     "\"]},{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:PutObject\",\"s3:AbortMultipartUpload\",\"s3:DeleteObject\",\"s3:GetObject\",\"s3:ListMultipartUploadParts\"],\"Resource\":[\"arn:aws:s3:::" +
-                    bucketName + "/*\"]}]}";
+                    bucket + "/*\"]}]}";
             SetBucketPolicyArgs setBucketPolicyArgs = SetBucketPolicyArgs.builder()
-                    .bucket(bucketName)
+                    .bucket(bucket)
                     .config(sb)
                     .build();
             /*璁剧疆閫氱煡mqtt*/
@@ -85,7 +116,7 @@
             queueConfigurations.add(queueConfiguration);
             config.setQueueConfigurationList(queueConfigurations);
             SetBucketNotificationArgs setBucketNotificationArgs = SetBucketNotificationArgs.builder()
-                    .bucket(bucketName)
+                    .bucket(bucket)
                     .config(config).build();
             minioClient.setBucketPolicy(setBucketPolicyArgs);
             minioClient.setBucketNotification(setBucketNotificationArgs);
@@ -102,7 +133,7 @@
      *
      * @param bucket 妗跺悕绉�
      */
-    public boolean removeBucket(String bucket) {
+    public static boolean removeBucket(String bucket) {
         try {
             boolean found = exitsBucket(bucket);
             if (found) {
@@ -130,7 +161,7 @@
      *
      * @return
      */
-    public List<Bucket> getListBuckets() {
+    public static List<Bucket> getListBuckets() {
         try {
             return minioClient.listBuckets();
         } catch (Exception e) {
@@ -143,19 +174,19 @@
      * 鐢熸垚涓�涓狦ET璇锋眰鐨勫甫鏈夊け鏁堟椂闂寸殑鍒嗕韩閾炬帴銆�
      * 澶辨晥鏃堕棿榛樿鏄�7澶┿��
      *
-     * @param bucketName 瀛樺偍妗跺悕绉�
-     * @param objectName 瀛樺偍妗堕噷鐨勫璞″悕绉�
-     * @param expires    澶辨晥鏃堕棿锛堜互绉掍负鍗曚綅锛夛紝榛樿鏄�7澶╋紝涓嶅緱澶т簬涓冨ぉ
+     * @param bucket  瀛樺偍妗跺悕绉�
+     * @param object  瀛樺偍妗堕噷鐨勫璞″悕绉�
+     * @param expires 澶辨晥鏃堕棿锛堜互绉掍负鍗曚綅锛夛紝榛樿鏄�7澶╋紝涓嶅緱澶т簬涓冨ぉ
      * @return
      */
-    public String getObjectWithExpired(String bucketName, String objectName, Integer expires, TimeUnit timeUnit) {
+    public static String getObjectWithExpired(String bucket, String object, Integer expires, TimeUnit timeUnit) {
         String url = "";
-        if (exitsBucket(bucketName)) {
+        if (exitsBucket(bucket)) {
             try {
                 GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs.builder()
                         .method(Method.GET)
-                        .bucket(bucketName)
-                        .object(objectName)
+                        .bucket(bucket)
+                        .object(object)
                         .expiry(expires, timeUnit)
                         .build();
                 url = minioClient.getPresignedObjectUrl(getPresignedObjectUrlArgs);
@@ -163,7 +194,7 @@
                 log.error("minio鐢熸垚澶辨晥url寮傚父", ex.getMessage());
             }
         } else {
-            createBucket(bucketName);
+            createBucket(bucket);
         }
         return url;
     }
@@ -176,20 +207,13 @@
      * @鍒涘缓鏃堕棿 2023/5/18 12:16
      * @淇敼浜哄拰鍏跺畠淇℃伅
      */
-    public String putObjectAndGetUrl(String bucketName, MultipartFile file) {
-        if (!exitsBucket(bucketName)) {
-            createBucket(bucketName);
+    public static String putObjectAndGetUrl(String bucket, MultipartFile file) {
+        if (!exitsBucket(bucket)) {
+            createBucket(bucket);
         }
         //鍒ゆ柇鏂囦欢鏄惁涓虹┖
         if (null == file || 0 == file.getSize()) {
             log.error("涓婁紶minio鏂囦欢鏈嶅姟鍣ㄩ敊璇紝涓婁紶鏂囦欢涓虹┖");
-        }
-        boolean exsit = exitsBucket(bucketName);
-        if (!exsit) {
-            boolean bucket = createBucket(bucketName);
-            if (bucket) {
-                log.info(bucketName + "-妗朵笉瀛樺湪,鎴愬姛鍒涘缓妗�");
-            }
         }
         //鏂囦欢鍚�
         String originalFilename = file.getOriginalFilename();
@@ -200,7 +224,7 @@
             /*涓婁紶瀵硅薄*/
             PutObjectArgs putObjectArgs = PutObjectArgs
                     .builder()
-                    .bucket(bucketName)
+                    .bucket(bucket)
                     .object(fileName)
                     .stream(inputStream, file.getSize(), -1)
                     .contentType(file.getContentType())
@@ -210,7 +234,7 @@
             /*鑾峰彇url*/
             GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs
                     .builder()
-                    .bucket(bucketName)
+                    .bucket(bucket)
                     .object(fileName)
                     .method(Method.GET)
                     .build();
@@ -231,20 +255,13 @@
      * @鍒涘缓鏃堕棿 2023/5/18 12:16
      * @淇敼浜哄拰鍏跺畠淇℃伅
      */
-    public String putObjectAndGetUrl(String bucketName, String folder, MultipartFile file) {
-        if (!exitsBucket(bucketName)) {
-            createBucket(bucketName);
+    public static String putObjectAndGetUrl(String bucket, String folder, MultipartFile file) {
+        if (!exitsBucket(bucket)) {
+            createBucket(bucket);
         }
         //鍒ゆ柇鏂囦欢鏄惁涓虹┖
         if (null == file || 0 == file.getSize()) {
             log.error("涓婁紶minio鏂囦欢鏈嶅姟鍣ㄩ敊璇紝涓婁紶鏂囦欢涓虹┖");
-        }
-        boolean exsit = exitsBucket(bucketName);
-        if (!exsit) {
-            boolean bucket = createBucket(bucketName);
-            if (bucket) {
-                log.info(bucketName + "-妗朵笉瀛樺湪,鎴愬姛鍒涘缓妗�");
-            }
         }
         //鏂囦欢鍚�
         String originalFilename = file.getOriginalFilename();
@@ -255,7 +272,7 @@
             /*涓婁紶瀵硅薄*/
             PutObjectArgs putObjectArgs = PutObjectArgs
                     .builder()
-                    .bucket(bucketName)
+                    .bucket(bucket)
                     .object(fileName)
                     .stream(inputStream, file.getSize(), -1)
                     .contentType(file.getContentType())
@@ -265,7 +282,7 @@
             /*鑾峰彇url*/
             GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs
                     .builder()
-                    .bucket(bucketName)
+                    .bucket(bucket)
                     .object(fileName)
                     .method(Method.GET)
                     .build();
@@ -281,15 +298,15 @@
     /**
      * 鍒犻櫎鏂囦欢
      *
-     * @param bucket     妗跺悕绉�
-     * @param objectName 瀵硅薄鍚嶇О
+     * @param bucket 妗跺悕绉�
+     * @param object 瀵硅薄鍚嶇О
      * @return boolean
      */
-    public boolean removeObject(String bucket, String objectName) {
+    public static boolean removeObject(String bucket, String object) {
         try {
             boolean exsit = exitsBucket(bucket);
             if (exsit) {
-                RemoveObjectArgs removeObjectArgs = RemoveObjectArgs.builder().bucket(bucket).object(objectName).build();
+                RemoveObjectArgs removeObjectArgs = RemoveObjectArgs.builder().bucket(bucket).object(object).build();
                 minioClient.removeObject(removeObjectArgs);
                 return true;
             }
@@ -302,14 +319,14 @@
     /**
      * 鎵归噺鍒犻櫎鏂囦欢
      *
-     * @param objectNames 瀵硅薄鍚嶇О
+     * @param objectList 瀵硅薄鍚嶇О鍒楄〃
      * @return boolean
      */
-    public boolean removeObjects(String bucket, List<String> objectNames) {
+    public static boolean removeObjects(String bucket, List<String> objectList) {
         if (exitsBucket(bucket)) {
             try {
                 List<DeleteObject> objects = new LinkedList<>();
-                for (String str : objectNames) {
+                for (String str : objectList) {
                     objects.add(new DeleteObject(str));
                 }
                 RemoveObjectsArgs removeObjectsArgs = RemoveObjectsArgs.builder().bucket(bucket).objects(objects).build();
@@ -334,7 +351,7 @@
      * @param bucket 妗跺悕绉�
      * @return {@link List}<{@link String}>
      */
-    public List<String> getBucketObjectName(String bucket) {
+    public static List<String> getBucketObjectName(String bucket) {
         boolean exsit = exitsBucket(bucket);
         if (exsit) {
             List<String> listObjetcName = new ArrayList<>();
@@ -356,10 +373,11 @@
     /**
      * 鑾峰彇鍗曚釜妗朵腑鐨勬墍鏈夋枃浠跺璞″悕绉�
      *
-     * @param [bucket,prefix]
+     * @param bucket 妗跺悕绉�
+     * @param prefix 鍓嶇紑
      * @return {@link List}<{@link String}>
      */
-    public List<String> getBucketObjectName(String bucket, String prefix) {
+    public static List<String> getBucketObjectName(String bucket, String prefix) {
         boolean exsit = exitsBucket(bucket);
         if (exsit) {
             List<String> listObjetcName = new ArrayList<>();
@@ -381,19 +399,19 @@
     /**
      * 鑾峰彇鏌愪釜妗朵笅鏌愪釜瀵硅薄鐨刄RL
      *
-     * @param bucket     妗跺悕绉�
-     * @param objectName 瀵硅薄鍚� (鏂囦欢澶瑰悕 + 鏂囦欢鍚�)
+     * @param bucket 妗跺悕绉�
+     * @param object 瀵硅薄鍚� (鏂囦欢澶瑰悕 + 鏂囦欢鍚�)
      * @return
      */
-    public String getBucketObjectUrl(String bucketName, String objectName) {
+    public static String getBucketObjectUrl(String bucket, String object) {
         try {
-            if (!exitsBucket(bucketName)) {
+            if (!exitsBucket(bucket)) {
                 return "";
             }
             GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs
                     .builder()
-                    .bucket(bucketName)
-                    .object(objectName)
+                    .bucket(bucket)
+                    .object(object)
                     .method(Method.GET)
                     .build();
             String presignedObjectUrl = minioClient.getPresignedObjectUrl(getPresignedObjectUrlArgs);
@@ -408,20 +426,20 @@
     /**
      * 涓婁紶瀵硅薄-stream
      *
-     * @param bucketName  bucket鍚嶇О
-     * @param objectName  饨備欢鍚嶇О
+     * @param bucket      bucket鍚嶇О
+     * @param object      饨備欢鍚嶇О
      * @param stream      饨備欢娴�
      * @param size        饧も缉
      * @param contextType 绫诲瀷 Image/jpeg 娴忚鍣ㄥ彲浠ョ洿鎺ユ墦寮�锛屽惁鍒欎笅杞�
      */
-    public boolean uploadObject(String bucketName, String objectName, InputStream stream, long size, String contextType) {
+    public static boolean uploadObject(String bucket, String object, InputStream stream, long size, String contextType) {
         try {
-            if (!exitsBucket(bucketName)) {
-                createBucket(bucketName);
+            if (!exitsBucket(bucket)) {
+                createBucket(bucket);
             }
             PutObjectArgs putObjectArgs = PutObjectArgs.builder()
-                    .bucket(bucketName)
-                    .object(objectName)
+                    .bucket(bucket)
+                    .object(object)
                     .stream(stream, size, -1)
                     .contentType(contextType)
                     .build();
@@ -436,20 +454,20 @@
     /**
      * 涓婁紶瀵硅薄-File
      *
-     * @param bucketName  bucket鍚嶇О
-     * @param objectName  饨備欢鍚嶇О
+     * @param bucket      bucket鍚嶇О
+     * @param object      饨備欢鍚嶇О
      * @param file        饨備欢
      * @param contextType 绫诲瀷 Image/jpeg 娴忚鍣ㄥ彲浠ョ洿鎺ユ墦寮�锛屽惁鍒欎笅杞�
      */
-    public boolean uploadObject(String bucketName, String objectName, File file, String contextType) {
+    public static boolean uploadObject(String bucket, String object, File file, String contextType) {
         try {
-            if (!exitsBucket(bucketName)) {
-                createBucket(bucketName);
+            if (!exitsBucket(bucket)) {
+                createBucket(bucket);
             }
             FileInputStream fileInputStream = new FileInputStream(file);
             PutObjectArgs putObjectArgs = PutObjectArgs.builder()
-                    .bucket(bucketName)
-                    .object(objectName)
+                    .bucket(bucket)
+                    .object(object)
                     .stream(fileInputStream, file.length(), -1)
                     .contentType(contextType)
                     .build();
@@ -464,20 +482,20 @@
     /**
      * 涓婁紶瀵硅薄-MultipartFile
      *
-     * @param bucketName    bucket鍚嶇О
-     * @param objectName    饨備欢鍚嶇О
-     * @param MultipartFile 饨備欢
+     * @param bucket        bucket鍚嶇О
+     * @param object        饨備欢鍚嶇О
+     * @param multipartFile 饨備欢
      * @param contextType   绫诲瀷 Image/jpeg 娴忚鍣ㄥ彲浠ョ洿鎺ユ墦寮�锛屽惁鍒欎笅杞�
      */
-    public boolean uploadObject(String bucketName, String objectName, MultipartFile multipartFile, String contextType) {
+    public static boolean uploadObject(String bucket, String object, MultipartFile multipartFile, String contextType) {
         try {
-            if (!exitsBucket(bucketName)) {
-                createBucket(bucketName);
+            if (!exitsBucket(bucket)) {
+                createBucket(bucket);
             }
             InputStream inputStream = multipartFile.getInputStream();
             PutObjectArgs putObjectArgs = PutObjectArgs.builder()
-                    .bucket(bucketName)
-                    .object(objectName)
+                    .bucket(bucket)
+                    .object(object)
                     .stream(inputStream, multipartFile.getSize(), -1)
                     .contentType(contextType)
                     .build();
@@ -492,15 +510,14 @@
     /**
      * 涓婁紶瀵硅薄,鐢╩ultipartFile鍚嶇О浣滀负瀵硅薄鍚�
      *
-     * @param bucketName    bucket鍚嶇О
-     * @param objectName    饨備欢鍚嶇О
-     * @param MultipartFile 饨備欢
+     * @param bucket        bucket鍚嶇О
+     * @param multipartFile 饨備欢
      * @param contextType   绫诲瀷 Image/jpeg 娴忚鍣ㄥ彲浠ョ洿鎺ユ墦寮�锛屽惁鍒欎笅杞�
      */
-    public boolean uploadObject(String bucketName, MultipartFile multipartFile, String contextType) {
+    public static boolean uploadObject(String bucket, MultipartFile multipartFile, String contextType) {
         try {
-            if (!exitsBucket(bucketName)) {
-                createBucket(bucketName);
+            if (!exitsBucket(bucket)) {
+                createBucket(bucket);
             }
             if (multipartFile == null) {
                 log.error("涓婁紶鏂囦欢涓虹┖");
@@ -509,7 +526,7 @@
             String objectName = multipartFile.getOriginalFilename();
             InputStream inputStream = multipartFile.getInputStream();
             PutObjectArgs putObjectArgs = PutObjectArgs.builder()
-                    .bucket(bucketName)
+                    .bucket(bucket)
                     .object(objectName)
                     .stream(inputStream, multipartFile.getSize(), -1)
                     .contentType(contextType)
@@ -525,15 +542,15 @@
     /**
      * 涓婁紶瀵硅薄-閫氳繃鏈湴璺緞
      *
-     * @param bulkName
-     * @param objectName
-     * @param localFilePathName
-     * @return
+     * @param bucket            妗跺悕绉�
+     * @param object            瀵硅薄鍚嶇О
+     * @param localFilePathName 鏂囦欢璺緞
+     * @return boolean
      */
-    public boolean uploadObject(String bucketName, String objectName, String localFilePathName, String contextType) {
+    public static boolean uploadObject(String bucket, String object, String localFilePathName, String contextType) {
         try {
-            if (!exitsBucket(bucketName)) {
-                createBucket(bucketName);
+            if (!exitsBucket(bucket)) {
+                createBucket(bucket);
             }
             File file = new File(localFilePathName);
             if (!file.exists()) {
@@ -541,8 +558,8 @@
                 return false;
             }
             UploadObjectArgs uploadObjectArgs = UploadObjectArgs.builder()
-                    .bucket(bucketName)
-                    .object(objectName)
+                    .bucket(bucket)
+                    .object(object)
                     .filename(localFilePathName)
                     .contentType(contextType)
                     .build();
@@ -562,7 +579,7 @@
      * @鍒涘缓鏃堕棿 2023/2/6 10:32
      * @淇敼浜哄拰鍏跺畠淇℃伅
      */
-    public Iterable<Result<Item>> getObjectsByBucket(String bucketName) {
+    public static Iterable<Result<Item>> getObjectsByBucket(String bucketName) {
         Iterable<Result<Item>> listObjects = minioClient.listObjects(ListObjectsArgs.builder()
                 .bucket(bucketName)
                 .recursive(true)
@@ -578,7 +595,7 @@
      * @鍒涘缓鏃堕棿 2023/2/6 10:32
      * @淇敼浜哄拰鍏跺畠淇℃伅
      */
-    public Iterable<Result<Item>> getObjectsByBucket(String bucketName, String prefix) {
+    public static Iterable<Result<Item>> getObjectsByBucket(String bucketName, String prefix) {
         Iterable<Result<Item>> listObjects = minioClient.listObjects(ListObjectsArgs.builder()
                 .bucket(bucketName)
                 .prefix(prefix)
@@ -586,4 +603,5 @@
                 .build());
         return listObjects;
     }
-}
\ No newline at end of file
+
+}

--
Gitblit v1.9.3