diff --git a/common/common-utils/src/main/java/cn/bunny/common/constant/MinioMessageConstant.java b/common/common-utils/src/main/java/cn/bunny/common/constant/MinioMessageConstant.java index ab6e6a6..b36a35e 100644 --- a/common/common-utils/src/main/java/cn/bunny/common/constant/MinioMessageConstant.java +++ b/common/common-utils/src/main/java/cn/bunny/common/constant/MinioMessageConstant.java @@ -10,4 +10,10 @@ public class MinioMessageConstant { public static final String QUERY_BUCKET_EXCEPTION = "查询文件信息失败"; public static final String CREATE_BUCKET_EXCEPTION = "创建文件对象失败"; public static final String UPDATE_BUCKET_EXCEPTION = "更新文件对象失败"; + public static final String COMPOSE_OBJECT_EXCEPTION = "对象错误"; + public static final String COPY_BUCKET_EXCEPTION = "复制文件内容失败"; + public static final String DISABLE_BUCKET_EXCEPTION = "禁用文件失败"; + public static final String ENABLE_BUCKET_EXCEPTION = "启用文件失败"; + public static final String DOWNLOAD_BUCKET_EXCEPTION = "下载文件失败"; + public static final String UPLOAD_BUCKET_EXCEPTION = "上传文件失败"; } diff --git a/module/module-minio/src/main/java/cn/bunny/module/minio/utils/MinioUtil.java b/module/module-minio/src/main/java/cn/bunny/module/minio/utils/MinioUtil.java index c1e24ba..41eb90f 100644 --- a/module/module-minio/src/main/java/cn/bunny/module/minio/utils/MinioUtil.java +++ b/module/module-minio/src/main/java/cn/bunny/module/minio/utils/MinioUtil.java @@ -13,8 +13,8 @@ import java.util.List; import java.util.Map; /** - * Minio操作工具类 - * 简化操作步骤 + * Minio操作工具类 简化操作步骤 + * By:Bunny0212 */ @Component @Slf4j @@ -44,13 +44,11 @@ public class MinioUtil { * 删除桶的加密配置 * * @param bucketName 桶名称 - * @return 是否删除成功,返回布尔值 */ - public boolean deleteBucketEncryption(String bucketName) { + public void deleteBucketEncryption(String bucketName) { try { minioClient.deleteBucketEncryption(DeleteBucketEncryptionArgs.builder().build()); log.info("删除桶的加密配置 ------ 成功"); - return true; } catch (Exception exception) { log.error("删除桶的加密配置 ------ 失败消息:{}", exception.getLocalizedMessage()); exception.getStackTrace(); @@ -62,13 +60,11 @@ public class MinioUtil { * 删除桶的生命周期配置 * * @param bucketName 桶名称 - * @return 返回布尔值,是否删除成功 */ - public boolean deleteBucketLifecycle(String bucketName) { + public void deleteBucketLifecycle(String bucketName) { try { minioClient.deleteBucketLifecycle(DeleteBucketLifecycleArgs.builder().build()); log.info("删除桶的生命周期配置 ------ 成功"); - return true; } catch (Exception exception) { log.error("删除桶的生命周期配置 ------ 失败消息:{}", exception.getLocalizedMessage()); exception.getStackTrace(); @@ -80,13 +76,11 @@ public class MinioUtil { * 删除桶的通知配置 * * @param bucketName 桶的名称 - * @return 返回布尔值是否删除成功 */ - public boolean deleteBucketNotification(String bucketName) { + public void deleteBucketNotification(String bucketName) { try { minioClient.deleteBucketNotification(DeleteBucketNotificationArgs.builder().bucket(bucketName).build()); log.info("删除桶的通知配置 ------ 成功"); - return true; } catch (Exception exception) { log.error("删除桶的加密配置 ------ 失败消息:{}", exception.getLocalizedMessage()); exception.getStackTrace(); @@ -98,13 +92,11 @@ public class MinioUtil { * 删除桶策略配置 * * @param bucketName 桶的名称 - * @return 返回布尔值是否删除成功 */ - public boolean deleteBucketPolicy(String bucketName) { + public void deleteBucketPolicy(String bucketName) { try { minioClient.deleteBucketPolicy(DeleteBucketPolicyArgs.builder().bucket(bucketName).build()); log.info("删除桶中的对象锁配置 ------ 成功"); - return true; } catch (Exception exception) { log.error("删除桶的加密配置 ------ 失败消息:{}", exception.getLocalizedMessage()); exception.getStackTrace(); @@ -116,13 +108,11 @@ public class MinioUtil { * 删除桶的桶复制配置 * * @param bucketName 桶的名称 - * @return 返回布尔值是否删除成功 */ - public boolean deleteBucketReplication(String bucketName) { + public void deleteBucketReplication(String bucketName) { try { minioClient.deleteBucketReplication(DeleteBucketReplicationArgs.builder().bucket(bucketName).build()); log.info("删除桶的桶复制配置 ------ 成功"); - return true; } catch (Exception exception) { log.error("删除桶的桶复制配置 ------ 失败消息:{}", exception.getLocalizedMessage()); exception.getStackTrace(); @@ -134,13 +124,11 @@ public class MinioUtil { * 删除桶的标签 * * @param bucketName 桶的名称 - * @return 返回布尔值是否删除成功 */ - public boolean deleteBucketTags(String bucketName) { + public void deleteBucketTags(String bucketName) { try { minioClient.deleteBucketTags(DeleteBucketTagsArgs.builder().bucket(bucketName).build()); log.info("删除桶的标签 ------ 成功"); - return true; } catch (Exception exception) { log.error("删除桶的桶复制配置 ------ 失败消息:{}", exception.getLocalizedMessage()); exception.getStackTrace(); @@ -152,13 +140,11 @@ public class MinioUtil { * 删除桶中的对象锁配置 * * @param bucketName 桶的名称 - * @return 返回布尔值是否删除成功 */ - public boolean deleteObjectLockConfiguration(String bucketName) { + public void deleteObjectLockConfiguration(String bucketName) { try { minioClient.deleteObjectLockConfiguration(DeleteObjectLockConfigurationArgs.builder().bucket(bucketName).build()); log.info("删除桶中的对象锁配置 ------ 成功"); - return true; } catch (Exception exception) { log.error("删除桶中的对象锁配置 ------ 失败消息:{}", exception.getLocalizedMessage()); exception.getStackTrace(); @@ -355,13 +341,11 @@ public class MinioUtil { * 创建桶 * * @param bucketName 桶的名称 - * @return boolean 返回是否创建成功 */ - public boolean makeBucket(String bucketName) { + public void makeBucket(String bucketName) { try { minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build()); log.info("创建桶 ------ 成功"); - return true; } catch (Exception exception) { log.error("创建桶 ------ 失败消息:{}", exception.getLocalizedMessage()); exception.getStackTrace(); @@ -373,13 +357,11 @@ public class MinioUtil { * 创建桶 * * @param bucketName 桶的名称 - * @return boolean 返回是否创建成功 */ - public boolean makeBucket(String bucketName, String region) { + public void makeBucket(String bucketName, String region) { try { minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).region(region).build()); log.info("创建桶 ------ 成功"); - return true; } catch (Exception exception) { log.error("创建桶 ------ 失败消息:{}", exception.getLocalizedMessage()); exception.getStackTrace(); @@ -391,13 +373,11 @@ public class MinioUtil { * 创建桶 * * @param bucketName 桶的名称 - * @return boolean 返回是否创建成功 */ - public boolean makeBucket(String bucketName, String region, boolean objectLock) { + public void makeBucket(String bucketName, String region, boolean objectLock) { try { minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).region(region).objectLock(objectLock).build()); log.info("创建桶 ------ 成功"); - return true; } catch (Exception exception) { log.error("创建桶 ------ 失败消息:{}", exception.getLocalizedMessage()); exception.getStackTrace(); @@ -409,13 +389,11 @@ public class MinioUtil { * 删除桶 * * @param bucketName 桶的名称 - * @return boolean 是否删除成功 */ - public boolean removeBucket(String bucketName) { + public void removeBucket(String bucketName) { try { minioClient.removeBucket(RemoveBucketArgs.builder().bucket(bucketName).build()); log.info("删除桶 ------ 成功"); - return true; } catch (Exception exception) { log.error("删除桶 ------ 失败消息:{}", exception.getLocalizedMessage()); exception.getStackTrace(); @@ -428,16 +406,11 @@ public class MinioUtil { * * @param bucketName 同名称 * @param configuration 配置信息 - * @return 布尔值是否完成 */ - public boolean setBucketEncryption(String bucketName, SseConfiguration configuration) { + public void setBucketEncryption(String bucketName, SseConfiguration configuration) { try { - minioClient.setBucketEncryption(SetBucketEncryptionArgs.builder() - .bucket(bucketName) - .config(configuration) - .build()); + minioClient.setBucketEncryption(SetBucketEncryptionArgs.builder().bucket(bucketName).config(configuration).build()); log.info("设置桶的加密配置 ------ 成功"); - return true; } catch (Exception exception) { log.error("设置桶的加密配置 ------ 失败消息:{}", exception.getLocalizedMessage()); exception.getStackTrace(); @@ -450,13 +423,11 @@ public class MinioUtil { * * @param bucketName 同名称 * @param policyJson 配置信息 - * @return 布尔值是否完成 */ - public boolean setBucketPolicy(String bucketName, String policyJson) { + public void setBucketPolicy(String bucketName, String policyJson) { try { minioClient.setBucketPolicy(SetBucketPolicyArgs.builder().bucket(bucketName).config(policyJson).build()); log.info("查看桶策略 ------ 成功"); - return true; } catch (Exception exception) { log.error("查看桶策略 ------ 失败消息:{}", exception.getLocalizedMessage()); exception.getStackTrace(); @@ -471,11 +442,10 @@ public class MinioUtil { * @param config 配置信息 * @return 布尔值是否完成 */ - public boolean setBucketReplication(String bucketName, ReplicationConfiguration config) { + public void setBucketReplication(String bucketName, ReplicationConfiguration config) { try { minioClient.setBucketReplication(SetBucketReplicationArgs.builder().bucket(bucketName).config(config).build()); log.info("设置桶复制参数 ------ 成功"); - return true; } catch (Exception exception) { log.error("设置桶复制参数 ------ 失败消息:{}", exception.getLocalizedMessage()); exception.getStackTrace(); @@ -487,14 +457,12 @@ public class MinioUtil { * 设置/修改桶标签 * * @param bucketName 桶名称 - * @param map Map map集合 - * @return 布尔值是否完成 + * @param map 标签集合 */ - public boolean setBucketTags(String bucketName, Map map) { + public void setBucketTags(String bucketName, Map map) { try { minioClient.setBucketTags(SetBucketTagsArgs.builder().bucket(bucketName).tags(map).build()); log.info("设置/修改桶标签 ------ 成功"); - return true; } catch (Exception exception) { log.error("设置/修改桶标签 ------ 失败消息:{}", exception.getLocalizedMessage()); exception.getStackTrace(); @@ -506,15 +474,13 @@ public class MinioUtil { * 设置桶的版本配置 * * @param bucketName 同名称 - * @param configuration VersioningConfiguration 配置信息 - * @return 布尔值是否完成 + * @param configuration 配置信息 */ - public boolean setBucketVersioning(String bucketName, VersioningConfiguration configuration) { + public void setBucketVersioning(String bucketName, VersioningConfiguration configuration) { try { minioClient.setBucketVersioning( SetBucketVersioningArgs.builder().bucket(bucketName).config(configuration).build()); log.info("设置桶的版本配置 ------ 成功"); - return true; } catch (Exception exception) { log.error("设置桶的版本配置 ------ 失败消息:{}", exception.getLocalizedMessage()); exception.getStackTrace(); @@ -522,8 +488,88 @@ public class MinioUtil { } } - // TODO setObjectLockConfiguration - // TODO https://min.io/docs/minio/linux/developers/java/API.html#getBucketTags + /** + * 对象对象锁定配置 + * + * @param bucketName 同名称 + * @param configuration 配置信息 + */ + public void setObjectLockConfiguration(String bucketName, ObjectLockConfiguration configuration) { + try { + minioClient.setObjectLockConfiguration(SetObjectLockConfigurationArgs.builder().bucket(bucketName).config(configuration).build()); + log.info("对象对象锁定配置 ------ 成功"); + } catch (Exception exception) { + log.error("对象对象锁定配置 ------ 失败消息:{}", exception.getLocalizedMessage()); + exception.getStackTrace(); + throw new BunnyException(MinioMessageConstant.UPDATE_BUCKET_EXCEPTION); + } + } + + /** + * 组合对象 + * + * @param bucketName 同名称 + * @param objectName 对象名称 + * @param sources 对象列表 + */ + public void composeObject(String bucketName, String objectName, List sources) { + try { + minioClient.composeObject(ComposeObjectArgs.builder().bucket(bucketName).object(objectName).sources(sources).build()); + log.info("组合对象 ------ 成功"); + } catch (Exception exception) { + log.error("组合对象 ------ 失败消息:{}", exception.getLocalizedMessage()); + exception.getStackTrace(); + throw new BunnyException(MinioMessageConstant.COMPOSE_OBJECT_EXCEPTION); + } + } + + /** + * 组合对象 + * + * @param bucketName 同名称 + * @param objectName 对象名称 + * @param sources 对象列表 + * @param userMetadata 用户元数据 + */ + public void composeObject(String bucketName, String objectName, List sources, Map userMetadata) { + try { + minioClient.composeObject(ComposeObjectArgs.builder() + .bucket(bucketName) + .object(objectName) + .sources(sources) + .userMetadata(userMetadata).build()); + log.info("组合对象 ------ 成功"); + } catch (Exception exception) { + log.error("组合对象 ------ 失败消息:{}", exception.getLocalizedMessage()); + exception.getStackTrace(); + throw new BunnyException(MinioMessageConstant.COMPOSE_OBJECT_EXCEPTION); + } + } + + /** + * 组合对象 + * + * @param bucketName 同名称 + * @param objectName 对象名称 + * @param sources 对象列表 + * @param userMetadata 用户元数据 + * @param sideEncryption 通过组合源对象列表 + */ + public void composeObject(String bucketName, String objectName, List sources, Map userMetadata, ServerSideEncryption sideEncryption) { + try { + minioClient.composeObject(ComposeObjectArgs.builder() + .bucket(bucketName) + .object(objectName) + .sources(sources) + .userMetadata(userMetadata) + .sse(sideEncryption).build()); + log.info("组合对象 ------ 成功"); + } catch (Exception exception) { + log.error("组合对象 ------ 失败消息:{}", exception.getLocalizedMessage()); + exception.getStackTrace(); + throw new BunnyException(MinioMessageConstant.COMPOSE_OBJECT_EXCEPTION); + } + } /** * 复制另一个桶中文件 @@ -532,67 +578,121 @@ public class MinioUtil { * @param objectName 复制名称 * @param sourceBucketName 复制到桶中名称 * @param sourceObjectName 复制完成后名称 - * @return 布尔值是否完成 */ - public boolean copyObject(String bucketName, String objectName, String sourceBucketName, String sourceObjectName) { - boolean isComplete = false; - + public void copyObject(String bucketName, String objectName, String sourceBucketName, String sourceObjectName) { try { - minioClient.copyObject( - CopyObjectArgs.builder() - .bucket(bucketName) - .object(objectName) - .source( - CopySource.builder() - .bucket(sourceBucketName) - .object(sourceObjectName) - .build()) - .build()); - isComplete = true; + minioClient.copyObject(CopyObjectArgs.builder() + .bucket(bucketName) + .object(objectName) + .source(CopySource.builder().bucket(sourceBucketName).object(sourceObjectName).build()) + .build()); + log.info("复制另一个桶中文件 ------ 成功"); } catch (Exception exception) { - exception.printStackTrace(); + log.error("复制另一个桶中文件 ------ 失败消息:{}", exception.getLocalizedMessage()); + exception.getStackTrace(); + throw new BunnyException(MinioMessageConstant.COPY_BUCKET_EXCEPTION); } - - return isComplete; } /** - * 删除对象的标记。 + * 复制另一个桶中文件 + * + * @param bucketName 桶中名字 + * @param objectName 复制名称 + * @param sourceBucketName 复制到桶中名称 + * @param sourceObjectName 复制完成后名称 + * @param sideEncryption 加密key + */ + public void copyObject(String bucketName, String objectName, String sourceBucketName, String sourceObjectName, ServerSideEncryption sideEncryption) { + try { + minioClient.copyObject(CopyObjectArgs.builder() + .bucket(bucketName) + .object(objectName) + .source(CopySource.builder().bucket(sourceBucketName).object(sourceObjectName).build()) + .sse(sideEncryption) + .build()); + log.info("复制另一个桶中文件 ------ 成功"); + } catch (Exception exception) { + log.error("复制另一个桶中文件 ------ 失败消息:{}", exception.getLocalizedMessage()); + exception.getStackTrace(); + throw new BunnyException(MinioMessageConstant.COPY_BUCKET_EXCEPTION); + } + } + + /** + * 复制另一个桶中文件 + * + * @param bucketName 桶中名字 + * @param objectName 复制名称 + * @param sourceBucketName 复制到桶中名称 + * @param sourceObjectName 复制完成后名称 + * @param etag 标签 + * @param headers 头部信息 + */ + public void copyObject(String bucketName, String objectName, String sourceBucketName, String sourceObjectName, String etag, Map headers) { + try { + minioClient.copyObject(CopyObjectArgs.builder() + .bucket(bucketName) + .object(objectName) + .source(CopySource.builder().bucket(sourceBucketName).object(sourceObjectName).matchETag(etag).build()) + .headers(headers) + .build()); + log.info("复制另一个桶中文件 ------ 成功"); + } catch (Exception exception) { + log.error("复制另一个桶中文件 ------ 失败消息:{}", exception.getLocalizedMessage()); + exception.getStackTrace(); + throw new BunnyException(MinioMessageConstant.COPY_BUCKET_EXCEPTION); + } + } + + /** + * 删除对象的标记 * * @param bucketName 桶中名字 * @param objectName 复制名称 - * @return 布尔值是否完成 */ - public boolean deleteObjectTags(String bucketName, String objectName) { - boolean isComplete = false; - + public void deleteObjectTags(String bucketName, String objectName) { try { minioClient.deleteObjectTags(DeleteObjectTagsArgs.builder().bucket(bucketName).object(objectName).build()); - isComplete = true; + log.info("删除对象的标记 ------ 成功"); } catch (Exception exception) { - exception.printStackTrace(); + log.error("删除对象的标记 ------ 失败消息:{}", exception.getLocalizedMessage()); + exception.getStackTrace(); + throw new BunnyException(MinioMessageConstant.DELETE_BUCKET_EXCEPTION); } - - return isComplete; } /** - * 下载文件 + * 禁用对象 * - * @param bucketName 桶名称 - * @param objectName 对象名称 - * @param filename 文件名 + * @param bucketName 桶中名字 + * @param objectName 复制名称 */ - public void downloadObject(String bucketName, String objectName, String filename) { + public void disableObjectLegalHold(String bucketName, String objectName) { try { - minioClient.downloadObject( - DownloadObjectArgs.builder() - .bucket(bucketName) - .object(objectName) - .filename(filename) - .build()); + minioClient.disableObjectLegalHold(DisableObjectLegalHoldArgs.builder().bucket(bucketName).object(objectName).build()); + log.info("禁用对象 ------ 成功"); } catch (Exception exception) { - exception.printStackTrace(); + log.error("禁用对象 ------ 失败消息:{}", exception.getLocalizedMessage()); + exception.getStackTrace(); + throw new BunnyException(MinioMessageConstant.DISABLE_BUCKET_EXCEPTION); + } + } + + /** + * 启用文件对象 + * + * @param bucketName 桶中名字 + * @param objectName 复制名称 + */ + public void enableObjectLegalHold(String bucketName, String objectName) { + try { + minioClient.enableObjectLegalHold(EnableObjectLegalHoldArgs.builder().bucket(bucketName).object(objectName).build()); + log.info("禁用对象 ------ 成功"); + } catch (Exception exception) { + log.error("禁用对象 ------ 失败消息:{}", exception.getLocalizedMessage()); + exception.getStackTrace(); + throw new BunnyException(MinioMessageConstant.ENABLE_BUCKET_EXCEPTION); } } @@ -604,13 +704,89 @@ public class MinioUtil { */ public InputStream getObject(String bucketName, String objectName) { try { - return minioClient.getObject(GetObjectArgs.builder() - .bucket(bucketName) - .object(objectName) - .build()); + GetObjectResponse object = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(objectName).build()); + log.info("获取文件 ------ 成功"); + return object; } catch (Exception exception) { - exception.printStackTrace(); - return null; // 或者抛出自定义异常 + log.error("获取文件 ------ 失败消息:{}", exception.getLocalizedMessage()); + exception.getStackTrace(); + throw new BunnyException(MinioMessageConstant.GET_BUCKET_EXCEPTION); + } + } + + /** + * 下载文件 + * + * @param bucketName 桶名称 + * @param objectName 对象名称 + * @param filename 文件名 + */ + public void downloadObject(String bucketName, String objectName, String filename) { + try { + minioClient.downloadObject(DownloadObjectArgs.builder().bucket(bucketName).object(objectName).filename(filename).build()); + log.info("下载文件 ------ 成功"); + } catch (Exception exception) { + log.error("下载文件 ------ 失败消息:{}", exception.getLocalizedMessage()); + exception.getStackTrace(); + throw new BunnyException(MinioMessageConstant.DOWNLOAD_BUCKET_EXCEPTION); + } + } + + /** + * 下载文件 + * + * @param bucketName 桶名称 + * @param objectName 对象名称 + * @param filename 文件名 + * @param sideEncryption 秘钥 + */ + public void downloadObject(String bucketName, String objectName, String filename, ServerSideEncryptionCustomerKey sideEncryption) { + try { + minioClient.downloadObject(DownloadObjectArgs.builder().bucket(bucketName).object(objectName).filename(filename).ssec(sideEncryption).build()); + log.info("下载文件 ------ 成功"); + } catch (Exception exception) { + log.error("下载文件 ------ 失败消息:{}", exception.getLocalizedMessage()); + exception.getStackTrace(); + throw new BunnyException(MinioMessageConstant.DOWNLOAD_BUCKET_EXCEPTION); + } + } + + /** + * 获取对象保留 + * + * @param bucketName 桶名称 + * @param objectName 对象名称 + * @param versionId 版本ID + * @return 对象保留 + */ + public Retention getObjectRetention(String bucketName, String objectName, String versionId) { + try { + Retention retention = minioClient.getObjectRetention(GetObjectRetentionArgs.builder().bucket(bucketName).object(objectName).versionId(versionId).build()); + log.info("获取对象保留 ------ 成功"); + return retention; + } catch (Exception exception) { + log.error("获取对象保留 ------ 失败消息:{}", exception.getLocalizedMessage()); + exception.getStackTrace(); + throw new BunnyException(MinioMessageConstant.DOWNLOAD_BUCKET_EXCEPTION); + } + } + + /** + * 获取对象标签 + * + * @param bucketName 桶名称 + * @param objectName 对象名称 + * @return 对象保留 + */ + public Tags getObjectTags(String bucketName, String objectName) { + try { + Tags tags = minioClient.getObjectTags(GetObjectTagsArgs.builder().bucket(bucketName).object(objectName).build()); + log.info("获取对象标签 ------ 成功"); + return tags; + } catch (Exception exception) { + log.error("获取对象标签 ------ 失败消息:{}", exception.getLocalizedMessage()); + exception.getStackTrace(); + throw new BunnyException(MinioMessageConstant.GET_BUCKET_EXCEPTION); } } @@ -624,17 +800,15 @@ public class MinioUtil { */ public void putObject(String bucketName, String filename, InputStream inputStream, Long size) { try { - minioClient.putObject( - PutObjectArgs.builder().bucket(bucketName) - .object(filename) - .stream(inputStream, size, -1) - .build()); + minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).object(filename).stream(inputStream, size, -1).build()); + log.info("上传文件 ------ 成功"); } catch (Exception exception) { - exception.printStackTrace(); + log.error("上传文件 ------ 失败消息:{}", exception.getLocalizedMessage()); + exception.getStackTrace(); + throw new BunnyException(MinioMessageConstant.UPLOAD_BUCKET_EXCEPTION); } } - /** * 上传文件 * @@ -646,14 +820,35 @@ public class MinioUtil { */ public void putObject(String bucketName, String filename, String contentType, InputStream inputStream, Long size) { try { - minioClient.putObject( - PutObjectArgs.builder().bucket(bucketName) - .object(filename) - .stream(inputStream, size, -1) - .contentType(contentType) - .build()); + minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).object(filename).stream(inputStream, size, -1).contentType(contentType).build()); + log.info("上传文件 ------ 成功"); } catch (Exception exception) { - exception.printStackTrace(); + log.error("上传文件 ------ 失败消息:{}", exception.getLocalizedMessage()); + exception.getStackTrace(); + throw new BunnyException(MinioMessageConstant.UPLOAD_BUCKET_EXCEPTION); + } + } + + /** + * 上传文件 + * + * @param bucketName 桶名称 + * @param object 对象信息 + * @param filename 文件名 + * @param contentType 文件类型 + */ + public void putObject(String bucketName, String object, String filename, String contentType) { + try { + if (contentType != null) { + minioClient.uploadObject(UploadObjectArgs.builder().bucket(bucketName).object(filename).contentType(contentType).build()); + } else { + minioClient.uploadObject(UploadObjectArgs.builder().bucket(bucketName).object(filename).build()); + } + log.info("上传文件 ------ 成功"); + } catch (Exception exception) { + log.error("上传文件 ------ 失败消息:{}", exception.getLocalizedMessage()); + exception.getStackTrace(); + throw new BunnyException(MinioMessageConstant.UPLOAD_BUCKET_EXCEPTION); } } @@ -665,13 +860,123 @@ public class MinioUtil { */ public void removeObject(String bucketName, String objectName) { try { - minioClient.removeObject( - RemoveObjectArgs.builder() - .bucket(bucketName) - .object(objectName) - .build()); + minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(objectName).build()); + log.info("删除文件 ------ 成功"); } catch (Exception exception) { - exception.printStackTrace(); + log.error("删除文件 ------ 失败消息:{}", exception.getLocalizedMessage()); + exception.getStackTrace(); + throw new BunnyException(MinioMessageConstant.DELETE_BUCKET_EXCEPTION); + } + } + + /** + * 删除文件 + * + * @param bucketName 桶名称 + * @param objectName 对象名称 + * @param versionId 版本号 + */ + public void removeObject(String bucketName, String objectName, String versionId) { + try { + minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(objectName).versionId(versionId).build()); + log.info("删除文件 ------ 成功"); + } catch (Exception exception) { + log.error("删除文件 ------ 失败消息:{}", exception.getLocalizedMessage()); + exception.getStackTrace(); + throw new BunnyException(MinioMessageConstant.DELETE_BUCKET_EXCEPTION); + } + } + + /** + * 删除文件 + * + * @param bucketName 桶名称 + * @param objectName 对象名称 + * @param bypassRetentionMode 保持模式 + */ + public void removeObject(String bucketName, String objectName, String versionId, boolean bypassRetentionMode) { + try { + minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(objectName).versionId(versionId).bypassGovernanceMode(bypassRetentionMode).build()); + log.info("删除文件 ------ 成功"); + } catch (Exception exception) { + log.error("删除文件 ------ 失败消息:{}", exception.getLocalizedMessage()); + exception.getStackTrace(); + throw new BunnyException(MinioMessageConstant.DELETE_BUCKET_EXCEPTION); + } + } + + /** + * 上传多文件,通过创建中间TAR文件(可选压缩)来完成的 + * + * @param bucketName 桶名称 + * @param objects 对象名称 + */ + public void uploadSnowballObjects(String bucketName, List objects) { + try { + minioClient.uploadSnowballObjects(UploadSnowballObjectsArgs.builder().bucket(bucketName).objects(objects).build()); + log.info("上传多文件 ------ 成功"); + } catch (Exception exception) { + log.error("上传多文件 ------ 失败消息:{}", exception.getLocalizedMessage()); + exception.getStackTrace(); + throw new BunnyException(MinioMessageConstant.UPLOAD_BUCKET_EXCEPTION); + } + } + + /** + * 设置对象标签 + * + * @param bucketName 桶名称 + * @param objectName 对象名称 + * @param retention 配置信息 + * @param bypassGovernanceMode 保持模式 + */ + public void setObjectLockRetention(String bucketName, String objectName, Retention retention, boolean bypassGovernanceMode) { + try { + minioClient.setObjectRetention(SetObjectRetentionArgs.builder().bucket(bucketName).object(objectName).config(retention).bypassGovernanceMode(bypassGovernanceMode).build()); + log.info("删除文件 ------ 成功"); + } catch (Exception exception) { + log.error("删除文件 ------ 失败消息:{}", exception.getLocalizedMessage()); + exception.getStackTrace(); + throw new BunnyException(MinioMessageConstant.UPDATE_BUCKET_EXCEPTION); + } + } + + /** + * 设置对象标签 + * + * @param bucketName 桶名称 + * @param objectName 对象名称 + * @param map 对象集合 + */ + public void setObjectTags(String bucketName, String objectName, Map map) { + try { + minioClient.setObjectTags(SetObjectTagsArgs.builder().bucket(bucketName).object(objectName).tags(map).build()); + log.info("删除文件 ------ 成功"); + } catch (Exception exception) { + log.error("删除文件 ------ 失败消息:{}", exception.getLocalizedMessage()); + exception.getStackTrace(); + throw new BunnyException(MinioMessageConstant.UPDATE_BUCKET_EXCEPTION); + } + } + + /** + * 获取对象状态 + * + * @param bucketName 桶名称 + * @param objectName 对象名称 + * @param versionId 版本ID + * @param customerKey 秘钥 + * @return 对象信息 + */ + public StatObjectResponse statObject(String bucketName, String objectName, String versionId, ServerSideEncryptionCustomerKey customerKey) { + try { + StatObjectResponse statObjectResponse = minioClient.statObject(StatObjectArgs.builder().bucket(bucketName).object(objectName).versionId(versionId).ssec(customerKey).build()); + log.info("获取对象状态 ------ 成功"); + return statObjectResponse; + } catch (Exception exception) { + log.error("获取对象状态 ------ 失败消息:{}", exception.getLocalizedMessage()); + exception.getStackTrace(); + throw new BunnyException(MinioMessageConstant.DELETE_BUCKET_EXCEPTION); } } } \ No newline at end of file