| | |
| | | |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.common.utils.uuid.IdUtils; |
| | | import com.ruoyi.device.hiksdk.config.MinioClientSingleton; |
| | | import io.minio.*; |
| | | 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.util.concurrent.TimeUnit; |
| | |
| | | **/ |
| | | @SuppressWarnings("ALL") |
| | | @Slf4j(topic = "minio") |
| | | @Component |
| | | public class MinioUtils { |
| | | |
| | | @Resource |
| | | MinioClient minioClient; |
| | | |
| | | /** |
| | | * 判断桶是否存在 |
| | | */ |
| | | public static boolean exitsBucket(String bucketName) { |
| | | public boolean exitsBucket(String bucketName) { |
| | | boolean found = false; |
| | | try { |
| | | if (StringUtils.isEmpty(bucketName)) { |
| | | return false; |
| | | } |
| | | BucketExistsArgs bucketExistsArgs = BucketExistsArgs.builder().bucket(bucketName).build(); |
| | | found = MinioClientSingleton.getMinioClient().bucketExists(bucketExistsArgs); |
| | | found = minioClient.bucketExists(bucketExistsArgs); |
| | | |
| | | } catch (Exception ex) { |
| | | log.error("minio判断桶存在异常:", ex.getMessage()); |
| | |
| | | /** |
| | | * 创建桶,并设置桶策略为公共 |
| | | */ |
| | | public static boolean createBucket(String bucketName) { |
| | | public boolean createBucket(String bucketName) { |
| | | try { |
| | | if (StringUtils.isEmpty(bucketName)) { |
| | | return false; |
| | | } |
| | | /*创建桶*/ |
| | | MakeBucketArgs makeBucketArgs = MakeBucketArgs.builder().bucket(bucketName).build(); |
| | | MinioClientSingleton.getMinioClient().makeBucket(makeBucketArgs); |
| | | minioClient.makeBucket(makeBucketArgs); |
| | | /*设置策略*/ |
| | | String sb = "{\"Version\":\"2012-10-17\"," + |
| | | "\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":" + |
| | |
| | | queueConfiguration.setQueue("arn:minio:sqs::_:mqtt"); |
| | | |
| | | //设置事件 |
| | | List<EventType> events=new ArrayList<>(); |
| | | List<EventType> events = new ArrayList<>(); |
| | | events.add(EventType.OBJECT_REMOVED_ANY); |
| | | events.add(EventType.OBJECT_CREATED_ANY); |
| | | queueConfiguration.setEvents(events); |
| | |
| | | SetBucketNotificationArgs setBucketNotificationArgs = SetBucketNotificationArgs.builder() |
| | | .bucket(bucketName) |
| | | .config(config).build(); |
| | | MinioClientSingleton.getMinioClient().setBucketPolicy(setBucketPolicyArgs); |
| | | MinioClientSingleton.getMinioClient().setBucketNotification(setBucketNotificationArgs); |
| | | minioClient.setBucketPolicy(setBucketPolicyArgs); |
| | | minioClient.setBucketNotification(setBucketNotificationArgs); |
| | | |
| | | return true; |
| | | } catch (Exception ex) { |
| | |
| | | * |
| | | * @param bucket 桶名称 |
| | | */ |
| | | public static boolean removeBucket(String bucket) { |
| | | public boolean removeBucket(String bucket) { |
| | | try { |
| | | boolean found = exitsBucket(bucket); |
| | | if (found) { |
| | | Iterable<Result<Item>> myObjects = MinioClientSingleton.getMinioClient().listObjects(ListObjectsArgs.builder().bucket(bucket).build()); |
| | | Iterable<Result<Item>> myObjects = minioClient.listObjects(ListObjectsArgs.builder().bucket(bucket).build()); |
| | | for (Result<Item> result : myObjects) { |
| | | Item item = result.get(); |
| | | //有对象文件,则删除失败 |
| | |
| | | } |
| | | } |
| | | // 删除`bucketName`存储桶,注意,只有存储桶为空时才能删除成功。 |
| | | MinioClientSingleton.getMinioClient().removeBucket(RemoveBucketArgs.builder().bucket(bucket).build()); |
| | | minioClient.removeBucket(RemoveBucketArgs.builder().bucket(bucket).build()); |
| | | found = exitsBucket(bucket); |
| | | return !found; |
| | | } |
| | |
| | | * |
| | | * @return |
| | | */ |
| | | public static List<Bucket> getListBuckets() { |
| | | public List<Bucket> getListBuckets() { |
| | | try { |
| | | return MinioClientSingleton.getMinioClient().listBuckets(); |
| | | return minioClient.listBuckets(); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | |
| | | * @param expires 失效时间(以秒为单位),默认是7天,不得大于七天 |
| | | * @return |
| | | */ |
| | | public static String getObjectWithExpired(String bucketName, String objectName, Integer expires, TimeUnit timeUnit) { |
| | | public String getObjectWithExpired(String bucketName, String objectName, Integer expires, TimeUnit timeUnit) { |
| | | String url = ""; |
| | | if (exitsBucket(bucketName)) { |
| | | try { |
| | |
| | | .object(objectName) |
| | | .expiry(expires, timeUnit) |
| | | .build(); |
| | | url = MinioClientSingleton.getMinioClient().getPresignedObjectUrl(getPresignedObjectUrlArgs); |
| | | url = minioClient.getPresignedObjectUrl(getPresignedObjectUrlArgs); |
| | | } catch (Exception ex) { |
| | | log.error("minio生成失效url异常", ex.getMessage()); |
| | | } |
| | |
| | | * @创建时间 2023/5/18 12:16 |
| | | * @修改人和其它信息 |
| | | */ |
| | | public static String putObjectAndGetUrl(String bucketName, MultipartFile file) { |
| | | public String putObjectAndGetUrl(String bucketName, MultipartFile file) { |
| | | if (!exitsBucket(bucketName)) { |
| | | createBucket(bucketName); |
| | | } |
| | |
| | | .stream(inputStream, file.getSize(), -1) |
| | | .contentType(file.getContentType()) |
| | | .build(); |
| | | MinioClientSingleton.getMinioClient().putObject(putObjectArgs); |
| | | minioClient.putObject(putObjectArgs); |
| | | inputStream.close(); |
| | | /*获取url*/ |
| | | GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs |
| | |
| | | .object(fileName) |
| | | .method(Method.GET) |
| | | .build(); |
| | | String presignedObjectUrl = MinioClientSingleton.getMinioClient().getPresignedObjectUrl(getPresignedObjectUrlArgs); |
| | | String presignedObjectUrl = minioClient.getPresignedObjectUrl(getPresignedObjectUrlArgs); |
| | | String ObjectUrl = presignedObjectUrl.substring(0, presignedObjectUrl.indexOf("?")); |
| | | return ObjectUrl; |
| | | } catch (Exception ex) { |
| | |
| | | * @创建时间 2023/5/18 12:16 |
| | | * @修改人和其它信息 |
| | | */ |
| | | public static String putObjectAndGetUrl(String bucketName, String folder, MultipartFile file) { |
| | | public String putObjectAndGetUrl(String bucketName, String folder, MultipartFile file) { |
| | | if (!exitsBucket(bucketName)) { |
| | | createBucket(bucketName); |
| | | } |
| | |
| | | .stream(inputStream, file.getSize(), -1) |
| | | .contentType(file.getContentType()) |
| | | .build(); |
| | | MinioClientSingleton.getMinioClient().putObject(putObjectArgs); |
| | | minioClient.putObject(putObjectArgs); |
| | | inputStream.close(); |
| | | /*获取url*/ |
| | | GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs |
| | |
| | | .object(fileName) |
| | | .method(Method.GET) |
| | | .build(); |
| | | String presignedObjectUrl = MinioClientSingleton.getMinioClient().getPresignedObjectUrl(getPresignedObjectUrlArgs); |
| | | String presignedObjectUrl = minioClient.getPresignedObjectUrl(getPresignedObjectUrlArgs); |
| | | String ObjectUrl = presignedObjectUrl.substring(0, presignedObjectUrl.indexOf("?")); |
| | | return ObjectUrl; |
| | | } catch (Exception ex) { |
| | |
| | | * @param objectName 对象名称 |
| | | * @return boolean |
| | | */ |
| | | public static boolean removeObject(String bucket, String objectName) { |
| | | public 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); |
| | | minioClient.removeObject(removeObjectArgs); |
| | | return true; |
| | | } |
| | | } catch (Exception e) { |
| | |
| | | * @param objectNames 对象名称 |
| | | * @return boolean |
| | | */ |
| | | public static boolean removeObjects(String bucket, List<String> objectNames) { |
| | | public boolean removeObjects(String bucket, List<String> objectNames) { |
| | | if (exitsBucket(bucket)) { |
| | | try { |
| | | List<DeleteObject> objects = new LinkedList<>(); |
| | |
| | | objects.add(new DeleteObject(str)); |
| | | } |
| | | RemoveObjectsArgs removeObjectsArgs = RemoveObjectsArgs.builder().bucket(bucket).objects(objects).build(); |
| | | Iterable<Result<DeleteError>> results = MinioClientSingleton.getMinioClient().removeObjects(removeObjectsArgs); |
| | | Iterable<Result<DeleteError>> results = minioClient.removeObjects(removeObjectsArgs); |
| | | /*删除完遍历结果,否则删不掉*/ |
| | | for (Result<DeleteError> result : results) { |
| | | DeleteError error = result.get(); |
| | |
| | | * @param bucket 桶名称 |
| | | * @return {@link List}<{@link String}> |
| | | */ |
| | | public static List<String> getBucketObjectName(String bucket) { |
| | | public 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); |
| | | Iterable<Result<Item>> myObjects = minioClient.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; |
| | | } |
| | | |
| | | /** |
| | | * 获取单个桶中的所有文件对象名称 |
| | | * |
| | | * @param [bucket,prefix] |
| | | * @return {@link List}<{@link String}> |
| | | */ |
| | | public List<String> getBucketObjectName(String bucket, String prefix) { |
| | | boolean exsit = exitsBucket(bucket); |
| | | if (exsit) { |
| | | List<String> listObjetcName = new ArrayList<>(); |
| | | try { |
| | | ListObjectsArgs listObjectsArgs = ListObjectsArgs.builder().prefix(prefix).bucket(bucket).build(); |
| | | Iterable<Result<Item>> myObjects = minioClient.listObjects(listObjectsArgs); |
| | | for (Result<Item> result : myObjects) { |
| | | Item item = result.get(); |
| | | listObjetcName.add(item.objectName()); |
| | |
| | | * @param objectName 对象名 (文件夹名 + 文件名) |
| | | * @return |
| | | */ |
| | | public static String getBucketObjectUrl(String bucketName, String objectName) { |
| | | public String getBucketObjectUrl(String bucketName, String objectName) { |
| | | try { |
| | | if (!exitsBucket(bucketName)) { |
| | | return ""; |
| | |
| | | .object(objectName) |
| | | .method(Method.GET) |
| | | .build(); |
| | | return MinioClientSingleton.getMinioClient().getPresignedObjectUrl(getPresignedObjectUrlArgs); |
| | | String presignedObjectUrl = minioClient.getPresignedObjectUrl(getPresignedObjectUrlArgs); |
| | | String ObjectUrl = presignedObjectUrl.substring(0, presignedObjectUrl.indexOf("?")); |
| | | return ObjectUrl; |
| | | } catch (Exception ex) { |
| | | log.error("minio获取对象URL异常" + ex.getMessage()); |
| | | } |
| | |
| | | * @param size ⼤⼩ |
| | | * @param contextType 类型 Image/jpeg 浏览器可以直接打开,否则下载 |
| | | */ |
| | | public static boolean uploadObject(String bucketName, String objectName, InputStream stream, long size, String contextType) { |
| | | public boolean uploadObject(String bucketName, String objectName, InputStream stream, long size, String contextType) { |
| | | try { |
| | | if (!exitsBucket(bucketName)) { |
| | | createBucket(bucketName); |
| | |
| | | .stream(stream, size, -1) |
| | | .contentType(contextType) |
| | | .build(); |
| | | ObjectWriteResponse objectWriteResponse = MinioClientSingleton.getMinioClient().putObject(putObjectArgs); |
| | | ObjectWriteResponse objectWriteResponse = minioClient.putObject(putObjectArgs); |
| | | return true; |
| | | } catch (Exception ex) { |
| | | log.error("minio上传文件(通过stream)异常" + ex.getMessage()); |
| | |
| | | * @param file ⽂件 |
| | | * @param contextType 类型 Image/jpeg 浏览器可以直接打开,否则下载 |
| | | */ |
| | | public static boolean uploadObject(String bucketName, String objectName, File file, String contextType) { |
| | | public boolean uploadObject(String bucketName, String objectName, File file, String contextType) { |
| | | try { |
| | | if (!exitsBucket(bucketName)) { |
| | | createBucket(bucketName); |
| | |
| | | .stream(fileInputStream, file.length(), -1) |
| | | .contentType(contextType) |
| | | .build(); |
| | | ObjectWriteResponse objectWriteResponse = MinioClientSingleton.getMinioClient().putObject(putObjectArgs); |
| | | ObjectWriteResponse objectWriteResponse = minioClient.putObject(putObjectArgs); |
| | | return true; |
| | | } catch (Exception ex) { |
| | | log.error("minio上传文件(通过File)异常" + ex.getMessage()); |
| | |
| | | * @param MultipartFile ⽂件 |
| | | * @param contextType 类型 Image/jpeg 浏览器可以直接打开,否则下载 |
| | | */ |
| | | public static boolean uploadObject(String bucketName, String objectName, MultipartFile multipartFile, String contextType) { |
| | | public boolean uploadObject(String bucketName, String objectName, MultipartFile multipartFile, String contextType) { |
| | | try { |
| | | if (!exitsBucket(bucketName)) { |
| | | createBucket(bucketName); |
| | |
| | | .stream(inputStream, multipartFile.getSize(), -1) |
| | | .contentType(contextType) |
| | | .build(); |
| | | ObjectWriteResponse objectWriteResponse = MinioClientSingleton.getMinioClient().putObject(putObjectArgs); |
| | | ObjectWriteResponse objectWriteResponse = minioClient.putObject(putObjectArgs); |
| | | return true; |
| | | } catch (Exception ex) { |
| | | log.error("minio上传文件(通过File)异常" + ex.getMessage()); |
| | |
| | | * @param MultipartFile ⽂件 |
| | | * @param contextType 类型 Image/jpeg 浏览器可以直接打开,否则下载 |
| | | */ |
| | | public static boolean uploadObject(String bucketName, MultipartFile multipartFile, String contextType) { |
| | | public boolean uploadObject(String bucketName, MultipartFile multipartFile, String contextType) { |
| | | try { |
| | | if (!exitsBucket(bucketName)) { |
| | | createBucket(bucketName); |
| | |
| | | .stream(inputStream, multipartFile.getSize(), -1) |
| | | .contentType(contextType) |
| | | .build(); |
| | | MinioClientSingleton.getMinioClient().putObject(putObjectArgs); |
| | | minioClient.putObject(putObjectArgs); |
| | | return true; |
| | | } catch (Exception ex) { |
| | | log.error("minio上传文件(通过File)异常" + ex.getMessage()); |
| | |
| | | * @param localFilePathName |
| | | * @return |
| | | */ |
| | | public static boolean uploadObject(String bucketName, String objectName, String localFilePathName, String contextType) { |
| | | public boolean uploadObject(String bucketName, String objectName, String localFilePathName, String contextType) { |
| | | try { |
| | | if (!exitsBucket(bucketName)) { |
| | | createBucket(bucketName); |
| | |
| | | .filename(localFilePathName) |
| | | .contentType(contextType) |
| | | .build(); |
| | | ObjectWriteResponse objectWriteResponse = MinioClientSingleton.getMinioClient().uploadObject(uploadObjectArgs); |
| | | ObjectWriteResponse objectWriteResponse = minioClient.uploadObject(uploadObjectArgs); |
| | | return true; |
| | | } catch (Exception e) { |
| | | log.error("minio upload object file error " + e.getMessage()); |
| | |
| | | * @创建时间 2023/2/6 10:32 |
| | | * @修改人和其它信息 |
| | | */ |
| | | public static Iterable<Result<Item>> getObjectsByBucket(String bucketName) { |
| | | Iterable<Result<Item>> listObjects = MinioClientSingleton.getMinioClient().listObjects(ListObjectsArgs.builder() |
| | | public Iterable<Result<Item>> getObjectsByBucket(String bucketName) { |
| | | Iterable<Result<Item>> listObjects = minioClient.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; |
| | | /** |
| | | * @描述 获取桶中所有对象 |
| | | * @参数 [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) { |
| | | Iterable<Result<Item>> listObjects = minioClient.listObjects(ListObjectsArgs.builder() |
| | | .bucket(bucketName) |
| | | .prefix(prefix) |
| | | .recursive(true) |
| | | .build()); |
| | | return listObjects; |
| | | } |
| | | } |