¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.device.hiksdk.util.minio; |
| | | |
| | | import com.ruoyi.device.hiksdk.config.MinioClientSingleton; |
| | | import io.minio.*; |
| | | import io.minio.http.Method; |
| | | import io.minio.messages.Bucket; |
| | | import io.minio.messages.DeleteError; |
| | | import io.minio.messages.DeleteObject; |
| | | import io.minio.messages.Item; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | import java.io.*; |
| | | import java.util.*; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | /** |
| | | * @Description: Minio客æ·ç«¯å·¥å
·ç±» |
| | | * @ClassName: MinioUtils |
| | | * @Author: åèä¹ |
| | | * @Date: 2023å¹´05æ18æ¥9:34 |
| | | * @Version: 1.0 |
| | | **/ |
| | | @SuppressWarnings("ALL") |
| | | @Slf4j(topic = "minio") |
| | | public class MinioUtils { |
| | | |
| | | /** |
| | | * å¤ææ¡¶æ¯å¦åå¨ |
| | | */ |
| | | public static boolean exitsBucket(String bucketName) { |
| | | boolean found = false; |
| | | try { |
| | | BucketExistsArgs bucketExistsArgs = BucketExistsArgs.builder().bucket(bucketName).build(); |
| | | found = MinioClientSingleton.getMinioClient().bucketExists(bucketExistsArgs); |
| | | } catch (Exception ex) { |
| | | log.error("minioå¤ææ¡¶åå¨å¼å¸¸ï¼", ex.getMessage()); |
| | | } |
| | | return found; |
| | | } |
| | | |
| | | /** |
| | | * å建桶,并设置桶çç¥ä¸ºå
Œ
± |
| | | */ |
| | | public static boolean createBucket(String bucketName) { |
| | | try { |
| | | /*å建桶*/ |
| | | MakeBucketArgs makeBucketArgs = MakeBucketArgs.builder().bucket(bucketName).build(); |
| | | MinioClientSingleton.getMinioClient().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 + |
| | | "\"]},{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:PutObject\",\"s3:AbortMultipartUpload\",\"s3:DeleteObject\",\"s3:GetObject\",\"s3:ListMultipartUploadParts\"],\"Resource\":[\"arn:aws:s3:::" + |
| | | bucketName + "/*\"]}]}"; |
| | | SetBucketPolicyArgs setBucketPolicyArgs = SetBucketPolicyArgs.builder() |
| | | .bucket(bucketName) |
| | | .config(sb) |
| | | .build(); |
| | | MinioClientSingleton.getMinioClient().setBucketPolicy(setBucketPolicyArgs); |
| | | return true; |
| | | } catch (Exception ex) { |
| | | log.error("minioå建桶å¼å¸¸ï¼", ex.getMessage()); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * å é¤ä¸ä¸ªæ¡¶ |
| | | * |
| | | * @param bucket æ¡¶åç§° |
| | | */ |
| | | public static boolean removeBucket(String bucket) { |
| | | try { |
| | | boolean found = exitsBucket(bucket); |
| | | if (found) { |
| | | Iterable<Result<Item>> myObjects = MinioClientSingleton.getMinioClient().listObjects(ListObjectsArgs.builder().bucket(bucket).build()); |
| | | for (Result<Item> result : myObjects) { |
| | | Item item = result.get(); |
| | | //æå¯¹è±¡æä»¶ï¼åå é¤å¤±è´¥ |
| | | if (item.size() > 0) { |
| | | return false; |
| | | } |
| | | } |
| | | // å é¤`bucketName`å卿¡¶ï¼æ³¨æï¼åªæå卿¡¶ä¸ºç©ºæ¶æè½å 餿åã |
| | | MinioClientSingleton.getMinioClient().removeBucket(RemoveBucketArgs.builder().bucket(bucket).build()); |
| | | found = exitsBucket(bucket); |
| | | return !found; |
| | | } |
| | | } catch (Exception ex) { |
| | | log.error("å 餿¡¶å¼å¸¸ï¼" + ex.getMessage()); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¯¢æææ¡¶æä»¶ |
| | | * |
| | | * @return |
| | | */ |
| | | public static List<Bucket> getListBuckets() { |
| | | try { |
| | | return MinioClientSingleton.getMinioClient().listBuckets(); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return Collections.emptyList(); |
| | | } |
| | | |
| | | /** |
| | | * çæä¸ä¸ªGET请æ±ç带æå¤±ææ¶é´çåäº«é¾æ¥ã |
| | | * å¤±ææ¶é´é»è®¤æ¯7天ã |
| | | * |
| | | * @param bucketName å卿¡¶åç§° |
| | | * @param objectName å卿¡¶éç对象åç§° |
| | | * @param expires å¤±ææ¶é´ï¼ä»¥ç§ä¸ºåä½ï¼ï¼é»è®¤æ¯7天ï¼ä¸å¾å¤§äºä¸å¤© |
| | | * @return |
| | | */ |
| | | public static String getObjectWithExpired(String bucketName, String objectName, Integer expires, TimeUnit timeUnit) { |
| | | String url = ""; |
| | | if (exitsBucket(bucketName)) { |
| | | try { |
| | | GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs.builder() |
| | | .method(Method.GET) |
| | | .bucket(bucketName) |
| | | .object(objectName) |
| | | .expiry(expires, timeUnit) |
| | | .build(); |
| | | url = MinioClientSingleton.getMinioClient().getPresignedObjectUrl(getPresignedObjectUrlArgs); |
| | | } catch (Exception ex) { |
| | | log.error("minioçæå¤±æurlå¼å¸¸", ex.getMessage()); |
| | | } |
| | | } |
| | | return url; |
| | | } |
| | | |
| | | /** |
| | | * @æè¿° ä¸ä¼ MultipartFileæä»¶è¿åurl |
| | | * @åæ° [bucketName, file] |
| | | * @è¿åå¼ java.lang.String |
| | | * @å建人 åèä¹ |
| | | * @å建æ¶é´ 2023/5/18 12:16 |
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯ |
| | | */ |
| | | public static String putObjectAndGetUrl(String bucketName, MultipartFile file) { |
| | | //夿æä»¶æ¯å¦ä¸ºç©º |
| | | if (null == file || 0 == file.getSize()) { |
| | | log.error("ä¸ä¼ minioæä»¶æå¡å¨é误ï¼ä¸ä¼ æä»¶ä¸ºç©º"); |
| | | } |
| | | boolean exsit = exitsBucket(bucketName); |
| | | if (!exsit) { |
| | | log.error(bucketName + "-æ¡¶ä¸åå¨"); |
| | | } |
| | | //æä»¶å |
| | | String originalFilename = file.getOriginalFilename(); |
| | | //æ°çæä»¶å |
| | | String fileName = UUID.randomUUID().toString().replace("-", "") + originalFilename; |
| | | try { |
| | | InputStream inputStream = file.getInputStream(); |
| | | /*ä¸ä¼ 对象*/ |
| | | PutObjectArgs putObjectArgs = PutObjectArgs |
| | | .builder() |
| | | .bucket(bucketName) |
| | | .object(fileName) |
| | | .stream(inputStream, file.getSize(), -1) |
| | | .contentType(file.getContentType()) |
| | | .build(); |
| | | MinioClientSingleton.getMinioClient().putObject(putObjectArgs); |
| | | inputStream.close(); |
| | | /*è·åurl*/ |
| | | GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs |
| | | .builder() |
| | | .bucket(bucketName) |
| | | .object(fileName) |
| | | .build(); |
| | | return MinioClientSingleton.getMinioClient().getPresignedObjectUrl(getPresignedObjectUrlArgs); |
| | | } catch (Exception ex) { |
| | | log.error("ä¸ä¼ 对象è¿åurlå¼å¸¸ï¼" + ex.getMessage()); |
| | | } |
| | | return ""; |
| | | } |
| | | |
| | | /** |
| | | * å 餿件 |
| | | * |
| | | * @param bucket æ¡¶åç§° |
| | | * @param objectName 对象åç§° |
| | | * @return boolean |
| | | */ |
| | | public static boolean removeObject(String bucket, String objectName) { |
| | | try { |
| | | boolean exsit = exitsBucket(bucket); |
| | | if (exsit) { |
| | | RemoveObjectArgs removeObjectArgs = RemoveObjectArgs.builder().bucket(bucket).object(objectName).build(); |
| | | MinioClientSingleton.getMinioClient().removeObject(removeObjectArgs); |
| | | return true; |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("removeObject", e); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * æ¹éå 餿件 |
| | | * |
| | | * @param objectNames 对象åç§° |
| | | * @return boolean |
| | | */ |
| | | public static boolean removeObjects(String bucket, List<String> objectNames) { |
| | | if (exitsBucket(bucket)) { |
| | | try { |
| | | List<DeleteObject> objects = new LinkedList<>(); |
| | | for (String str : objectNames) { |
| | | objects.add(new DeleteObject(str)); |
| | | } |
| | | RemoveObjectsArgs removeObjectsArgs = RemoveObjectsArgs.builder().bucket(bucket).objects(objects).build(); |
| | | Iterable<Result<DeleteError>> results = MinioClientSingleton.getMinioClient().removeObjects(removeObjectsArgs); |
| | | /*å é¤å®éåç»æï¼å¦åå 䏿*/ |
| | | for (Result<DeleteError> result : results) { |
| | | DeleteError error = result.get(); |
| | | log.error("Error in deleting object " + error.objectName() + "; " + error.message()); |
| | | } |
| | | |
| | | return true; |
| | | } catch (Exception ex) { |
| | | log.error("minioæ¹éå 餿件å¼å¸¸", ex.getMessage()); |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * è·åå个桶ä¸çæææä»¶å¯¹è±¡åç§° |
| | | * |
| | | * @param bucket æ¡¶åç§° |
| | | * @return {@link List}<{@link String}> |
| | | */ |
| | | public static List<String> getBucketObjectName(String bucket) { |
| | | boolean exsit = exitsBucket(bucket); |
| | | if (exsit) { |
| | | List<String> listObjetcName = new ArrayList<>(); |
| | | try { |
| | | ListObjectsArgs listObjectsArgs = ListObjectsArgs.builder().bucket(bucket).build(); |
| | | Iterable<Result<Item>> myObjects = MinioClientSingleton.getMinioClient().listObjects(listObjectsArgs); |
| | | for (Result<Item> result : myObjects) { |
| | | Item item = result.get(); |
| | | listObjetcName.add(item.objectName()); |
| | | } |
| | | return listObjetcName; |
| | | } catch (Exception ex) { |
| | | log.error("minioè·åæ¡¶ä¸å¯¹è±¡å¼å¸¸ï¼" + ex.getMessage()); |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * è·åæä¸ªæ¡¶ä¸æä¸ªå¯¹è±¡çURL |
| | | * |
| | | * @param bucket æ¡¶åç§° |
| | | * @param objectName 对象å (æä»¶å¤¹å + æä»¶å) |
| | | * @return |
| | | */ |
| | | public static String getBucketObjectUrl(String bucketName, String objectName) { |
| | | try { |
| | | if (!exitsBucket(bucketName)) { |
| | | return ""; |
| | | } |
| | | GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs |
| | | .builder() |
| | | .bucket(bucketName) |
| | | .object(objectName) |
| | | .build(); |
| | | return MinioClientSingleton.getMinioClient().getPresignedObjectUrl(getPresignedObjectUrlArgs); |
| | | } catch (Exception ex) { |
| | | log.error("minioè·å对象URLå¼å¸¸" + ex.getMessage()); |
| | | } |
| | | return ""; |
| | | } |
| | | |
| | | /** |
| | | * ä¸ä¼ 对象-stream |
| | | * |
| | | * @param bucketName bucketåç§° |
| | | * @param objectName â½ä»¶åç§° |
| | | * @param stream â½ä»¶æµ |
| | | * @param size ⼤⼩ |
| | | * @param contextType ç±»å Image/jpeg æµè§å¨å¯ä»¥ç´æ¥æå¼ï¼å¦åä¸è½½ |
| | | */ |
| | | public static boolean uploadObject(String bucketName, String objectName, InputStream stream, long size, String contextType) { |
| | | try { |
| | | PutObjectArgs putObjectArgs = PutObjectArgs.builder() |
| | | .bucket(bucketName) |
| | | .object(objectName) |
| | | .stream(stream, size, -1) |
| | | .contentType(contextType) |
| | | .build(); |
| | | ObjectWriteResponse objectWriteResponse = MinioClientSingleton.getMinioClient().putObject(putObjectArgs); |
| | | return true; |
| | | } catch (Exception ex) { |
| | | log.error("minioä¸ä¼ æä»¶(éè¿stream)å¼å¸¸" + ex.getMessage()); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * ä¸ä¼ 对象-File |
| | | * |
| | | * @param bucketName bucketåç§° |
| | | * @param objectName â½ä»¶åç§° |
| | | * @param file â½ä»¶ |
| | | * @param contextType ç±»å Image/jpeg æµè§å¨å¯ä»¥ç´æ¥æå¼ï¼å¦åä¸è½½ |
| | | */ |
| | | public static boolean uploadObject(String bucketName, String objectName, File file, String contextType) { |
| | | try { |
| | | FileInputStream fileInputStream = new FileInputStream(file); |
| | | PutObjectArgs putObjectArgs = PutObjectArgs.builder() |
| | | .bucket(bucketName) |
| | | .object(objectName) |
| | | .stream(fileInputStream, file.length(), -1) |
| | | .contentType(contextType) |
| | | .build(); |
| | | ObjectWriteResponse objectWriteResponse = MinioClientSingleton.getMinioClient().putObject(putObjectArgs); |
| | | return true; |
| | | } catch (Exception ex) { |
| | | log.error("minioä¸ä¼ æä»¶(éè¿File)å¼å¸¸" + ex.getMessage()); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * ä¸ä¼ 对象-MultipartFile |
| | | * |
| | | * @param bucketName bucketåç§° |
| | | * @param objectName â½ä»¶åç§° |
| | | * @param MultipartFile â½ä»¶ |
| | | * @param contextType ç±»å Image/jpeg æµè§å¨å¯ä»¥ç´æ¥æå¼ï¼å¦åä¸è½½ |
| | | */ |
| | | public static boolean uploadObject(String bucketName, String objectName, MultipartFile multipartFile, String contextType) { |
| | | try { |
| | | if (bucketName.isEmpty()) { |
| | | log.error("bucketå称为空"); |
| | | return false; |
| | | } |
| | | if (objectName.isEmpty()) { |
| | | log.error("对象å称为空"); |
| | | return false; |
| | | } |
| | | InputStream inputStream = multipartFile.getInputStream(); |
| | | PutObjectArgs putObjectArgs = PutObjectArgs.builder() |
| | | .bucket(bucketName) |
| | | .object(objectName) |
| | | .stream(inputStream, multipartFile.getSize(), -1) |
| | | .contentType(contextType) |
| | | .build(); |
| | | ObjectWriteResponse objectWriteResponse = MinioClientSingleton.getMinioClient().putObject(putObjectArgs); |
| | | return true; |
| | | } catch (Exception ex) { |
| | | log.error("minioä¸ä¼ æä»¶(éè¿File)å¼å¸¸" + ex.getMessage()); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * ä¸ä¼ 对象,ç¨multipartFileåç§°ä½ä¸ºå¯¹è±¡å |
| | | * |
| | | * @param bucketName bucketåç§° |
| | | * @param objectName â½ä»¶åç§° |
| | | * @param MultipartFile â½ä»¶ |
| | | * @param contextType ç±»å Image/jpeg æµè§å¨å¯ä»¥ç´æ¥æå¼ï¼å¦åä¸è½½ |
| | | */ |
| | | public static boolean uploadObject(String bucketName, MultipartFile multipartFile, String contextType) { |
| | | try { |
| | | if (multipartFile == null) { |
| | | log.error("ä¸ä¼ æä»¶ä¸ºç©º"); |
| | | return false; |
| | | } |
| | | String objectName = multipartFile.getOriginalFilename(); |
| | | InputStream inputStream = multipartFile.getInputStream(); |
| | | PutObjectArgs putObjectArgs = PutObjectArgs.builder() |
| | | .bucket(bucketName) |
| | | .object(objectName) |
| | | .stream(inputStream, multipartFile.getSize(), -1) |
| | | .contentType(contextType) |
| | | .build(); |
| | | MinioClientSingleton.getMinioClient().putObject(putObjectArgs); |
| | | return true; |
| | | } catch (Exception ex) { |
| | | log.error("minioä¸ä¼ æä»¶(éè¿File)å¼å¸¸" + ex.getMessage()); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * ä¸ä¼ 对象-éè¿æ¬å°è·¯å¾ |
| | | * |
| | | * @param bulkName |
| | | * @param objectName |
| | | * @param localFilePathName |
| | | * @return |
| | | */ |
| | | public static boolean uploadObject(String bulkName, String objectName, String localFilePathName, String contextType) { |
| | | try { |
| | | if (!exitsBucket(bulkName)) { |
| | | log.debug(bulkName + "ä¸åå¨"); |
| | | return false; |
| | | } |
| | | File file = new File(localFilePathName); |
| | | if (!file.exists()) { |
| | | log.debug("æä»¶ä¸åå¨"); |
| | | return false; |
| | | } |
| | | UploadObjectArgs uploadObjectArgs = UploadObjectArgs.builder() |
| | | .bucket(bulkName) |
| | | .object(objectName) |
| | | .filename(localFilePathName) |
| | | .contentType(contextType) |
| | | .build(); |
| | | ObjectWriteResponse objectWriteResponse = MinioClientSingleton.getMinioClient().uploadObject(uploadObjectArgs); |
| | | return true; |
| | | } catch (Exception e) { |
| | | log.error("minio upload object file error " + e.getMessage()); |
| | | return false; |
| | | } |
| | | } |
| | | /** |
| | | *@æè¿° è·åæ¡¶ä¸ææå¯¹è±¡ |
| | | *@åæ° [bucketName] |
| | | *@è¿åå¼ java.lang.Iterable<io.minio.Result<io.minio.messages.Item>> |
| | | *@å建人 åèä¹ |
| | | *@å建æ¶é´ 2023/2/6 10:32 |
| | | *@ä¿®æ¹äººåå
¶å®ä¿¡æ¯ |
| | | */ |
| | | public static Iterable<Result<Item>> getObjectsByBucket(String bucketName) { |
| | | Iterable<Result<Item>> listObjects = MinioClientSingleton.getMinioClient().listObjects(ListObjectsArgs.builder() |
| | | .bucket(bucketName) |
| | | .recursive(true) |
| | | .build()); |
| | | return listObjects; |
| | | } |
| | | |
| | | public static void main(String[] args) { |
| | | // /*å 餿¡¶*/ |
| | | // boolean b = removeBucket("lsy"); |
| | | // log.info(String.valueOf(b)); |
| | | // /*å建桶*/ |
| | | // boolean lsy = createBucket("lsy"); |
| | | // log.info(String.valueOf(lsy)); |
| | | // /*å¤ææ¡¶æ¯å¦åå¨*/ |
| | | // boolean pic = exitsBucket("lsy"); |
| | | // log.info(String.valueOf(pic)); |
| | | /*æ¥è¯¢æææ¡¶*/ |
| | | // List<Bucket> listBuckets = getListBuckets(); |
| | | // for (Bucket bucket : listBuckets) { |
| | | // log.info(bucket.name()); |
| | | // } |
| | | String bucket = "lsy"; |
| | | String filename = UUID.randomUUID().toString().replace("-", "") + "pic.jpeg"; |
| | | String fileFullPath = "C:\\Users\\Administrator\\Desktop\\微信æªå¾_20230518102605.png"; |
| | | // uploadObject(bucket, filename, fileFullPath, "Image/jpeg"); |
| | | // String url = getObjectWithExpired(bucket, filename, 10, SECONDS); |
| | | // System.out.println(url); |
| | | boolean b = removeBucket(bucket); |
| | | System.out.println(b); |
| | | // boolean b = uploadObjectBylocalPath(bucket, filename, fileFullPath); |
| | | // System.out.println(b); |
| | | //String url = getObjectWithExpired(bucket, filename, 10000); |
| | | // |
| | | //String url = getBucketObject(bucket, filename); |
| | | // System.out.println(url); package com.example.minio; |
| | | } |
| | | } |