ÎļþÃû´Ó src/main/java/com/ard/utils/minio/MinioUtils.java ÐÞ¸Ä |
| | |
| | | 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.File; |
| | | import java.io.FileInputStream; |
| | | import java.io.InputStream; |
| | |
| | | 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) { |
| | |
| | | /** |
| | | * å建桶,并设置桶çç¥ä¸ºå
Œ
± |
| | | */ |
| | | 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*/ |
| | |
| | | queueConfigurations.add(queueConfiguration); |
| | | config.setQueueConfigurationList(queueConfigurations); |
| | | SetBucketNotificationArgs setBucketNotificationArgs = SetBucketNotificationArgs.builder() |
| | | .bucket(bucketName) |
| | | .bucket(bucket) |
| | | .config(config).build(); |
| | | minioClient.setBucketPolicy(setBucketPolicyArgs); |
| | | minioClient.setBucketNotification(setBucketNotificationArgs); |
| | |
| | | * |
| | | * @param bucket æ¡¶åç§° |
| | | */ |
| | | public boolean removeBucket(String bucket) { |
| | | public static boolean removeBucket(String bucket) { |
| | | try { |
| | | boolean found = exitsBucket(bucket); |
| | | if (found) { |
| | |
| | | * |
| | | * @return |
| | | */ |
| | | public List<Bucket> getListBuckets() { |
| | | public static List<Bucket> getListBuckets() { |
| | | try { |
| | | return minioClient.listBuckets(); |
| | | } catch (Exception e) { |
| | |
| | | * çæä¸ä¸ªGET请æ±ç带æå¤±ææ¶é´çåäº«é¾æ¥ã |
| | | * å¤±ææ¶é´é»è®¤æ¯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); |
| | |
| | | log.error("minioçæå¤±æurlå¼å¸¸", ex.getMessage()); |
| | | } |
| | | } else { |
| | | createBucket(bucketName); |
| | | createBucket(bucket); |
| | | } |
| | | return url; |
| | | } |
| | |
| | | * @å建æ¶é´ 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(); |
| | |
| | | /*ä¸ä¼ 对象*/ |
| | | PutObjectArgs putObjectArgs = PutObjectArgs |
| | | .builder() |
| | | .bucket(bucketName) |
| | | .bucket(bucket) |
| | | .object(fileName) |
| | | .stream(inputStream, file.getSize(), -1) |
| | | .contentType(file.getContentType()) |
| | |
| | | /*è·åurl*/ |
| | | GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs |
| | | .builder() |
| | | .bucket(bucketName) |
| | | .bucket(bucket) |
| | | .object(fileName) |
| | | .method(Method.GET) |
| | | .build(); |
| | |
| | | * @å建æ¶é´ 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(); |
| | |
| | | /*ä¸ä¼ 对象*/ |
| | | PutObjectArgs putObjectArgs = PutObjectArgs |
| | | .builder() |
| | | .bucket(bucketName) |
| | | .bucket(bucket) |
| | | .object(fileName) |
| | | .stream(inputStream, file.getSize(), -1) |
| | | .contentType(file.getContentType()) |
| | |
| | | /*è·åurl*/ |
| | | GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs |
| | | .builder() |
| | | .bucket(bucketName) |
| | | .bucket(bucket) |
| | | .object(fileName) |
| | | .method(Method.GET) |
| | | .build(); |
| | |
| | | /** |
| | | * å 餿件 |
| | | * |
| | | * @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; |
| | | } |
| | |
| | | /** |
| | | * æ¹éå 餿件 |
| | | * |
| | | * @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(); |
| | |
| | | * @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<>(); |
| | |
| | | |
| | | /** |
| | | * è·åå个桶ä¸çæææä»¶å¯¹è±¡åç§° |
| | | * @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<>(); |
| | |
| | | /** |
| | | * è·åæä¸ªæ¡¶ä¸æä¸ªå¯¹è±¡çURL |
| | | * |
| | | * @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); |
| | |
| | | /** |
| | | * ä¸ä¼ 对象-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(); |
| | |
| | | /** |
| | | * ä¸ä¼ 对象-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(); |
| | |
| | | /** |
| | | * ä¸ä¼ 对象-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(); |
| | |
| | | /** |
| | | * ä¸ä¼ 对象,ç¨multipartFileåç§°ä½ä¸ºå¯¹è±¡å |
| | | * |
| | | * @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("ä¸ä¼ æä»¶ä¸ºç©º"); |
| | |
| | | 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) |
| | |
| | | /** |
| | | * ä¸ä¼ 对象-éè¿æ¬å°è·¯å¾ |
| | | * |
| | | * @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()) { |
| | |
| | | return false; |
| | | } |
| | | UploadObjectArgs uploadObjectArgs = UploadObjectArgs.builder() |
| | | .bucket(bucketName) |
| | | .object(objectName) |
| | | .bucket(bucket) |
| | | .object(object) |
| | | .filename(localFilePathName) |
| | | .contentType(contextType) |
| | | .build(); |
| | |
| | | * @å建æ¶é´ 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) |
| | |
| | | |
| | | /** |
| | | * @æè¿° è·åæ¡¶ä¸ææå¯¹è±¡ |
| | | * @åæ° [bucketName,prefix] |
| | | * @åæ° [bucketName, prefix] |
| | | * @è¿åå¼ java.lang.Iterable<io.minio.Result < io.minio.messages.Item>> |
| | | * @å建人 åèä¹ |
| | | * @å建æ¶é´ 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) |
| | |
| | | .build()); |
| | | return listObjects; |
| | | } |
| | | } |
| | | |
| | | } |