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