关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

Spring Boot 玩转 MinIO:轻松搭建分布式对象存储系统,提升数据管理效率

发布时间:2023-06-28 10:00:23

MinIO 简介

MinIO 是一个开源的对象存储服务器,可以通过简单的 HTTP/REST 接口来存储和检索任意数量的数据。它是云原生的,具有高可用性和可扩展性,并且支持多租户。MinIO 可以在本地或在云中运行,支持 S3 API,因此可以很容易地与许多现有的工具和应用程序集成。

Spring Boot 整合 MinIO

在 Spring Boot 应用程序中,可以使用 MinIO Java 客户端来连接和操作 MinIO 服务器。以下是一个使用 MinIO Java 客户端与 MinIO 服务器进行连接的示例:

首先,我们需要在 pom.xml 文件中添加 MinIO 客户端的依赖项:

 io.minio minio 8.2.6

   

接下来,我们需要在 Spring Boot 应用程序中创建一个配置类,用于配置连接到 MinIO 服务器所需的信息。可以使用以下示例配置类:

@Configuration public class MinioConfig {   @Value("${minio.access-key}")  private String accessKey;   @Value("${minio.secret-key}")  private String secretKey;   @Value("${minio.endpoint}")  private String endpoint;   @Value("${minio.region}")  private String region;   @Bean  public MinioClient minioClient() throws InvalidEndpointException, InvalidPortException {  return MinioClient.builder()  .endpoint(endpoint)  .credentials(accessKey, secretKey)  .region(region)  .build();  } }

   

在上面的代码中,我们使用了 @Value 注解来从应用程序的配置文件中获取连接到 MinIO 服务器所需的信息。然后,我们使用 MinioClient.builder() 方法创建一个 MinIO 客户端,并使用获取的信息进行配置。

最后,我们可以在 Spring Boot 应用程序的任何组件中注入 MinioClient 对象,并使用它来连接和操作 MinIO 服务器。以下是一个使用 MinioClient 对象上传文件到 MinIO 服务器的示例:

@Service public class MinioService {   @Autowired  private MinioClient minioClient;   public void uploadFile(String bucketName, String objectName, String fileName) throws Exception {  // Check if the bucket exists, and create it if it doesn't exist  boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());  if (!found) {  minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());  }   // Upload the file to the bucket  minioClient.uploadObject(UploadObjectArgs.builder()  .bucket(bucketName)  .object(objectName)  .filename(fileName)  .build());  } }

   

在上面的代码中,我们首先检查指定的桶是否存在,如果不存在,则创建它。然后,我们使用 MinioClient 对象将指定的文件上传到指定的桶中。

minio工具类代码示例

import io.minio.*; import io.minio.errors.*; import io.minio.messages.Bucket; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component;  import java.io.IOException; import java.io.InputStream; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.util.List;  @Component public class MinioUtils {   @Value("${minio.endpoint}")  private String endpoint;   @Value("${minio.accessKey}")  private String accessKey;   @Value("${minio.secretKey}")  private String secretKey;   @Value("${minio.bucketName}")  private String bucketName;   private MinioClient minioClient;   public MinioUtils() throws InvalidEndpointException, InvalidPortException {  this.minioClient = MinioClient.builder()  .endpoint(endpoint)  .credentials(accessKey, secretKey)  .build();  }   // 检查桶是否存在  public boolean checkBucketExist(String bucketName) throws InvalidBucketNameException, NoSuchAlgorithmException, InsufficientDataException, InvalidKeyException, IOException, NoResponseException, XmlPullParserException, ErrorResponseException, InternalException {  return minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());  }   // 创建桶  public void createBucket(String bucketName) throws InvalidBucketNameException, NoSuchAlgorithmException, InsufficientDataException, InvalidKeyException, IOException, NoResponseException, XmlPullParserException, ErrorResponseException, InternalException {  boolean isExist = checkBucketExist(bucketName);  if (!isExist) {  minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());  }  }   // 列出所有桶  public ListlistBuckets() throws InvalidKeyException, NoSuchAlgorithmException, InsufficientDataException, IOException, NoResponseException, XmlPullParserException, ErrorResponseException, InternalException {  return minioClient.listBuckets();  }   // 上传文件  public void uploadFile(InputStream stream, String objectName) throws IOException, InvalidKeyException, NoSuchAlgorithmException, InsufficientDataException, InvalidResponseException, ErrorResponseException, XmlPullParserException, InternalException {  minioClient.putObject(PutObjectArgs.builder()  .bucket(bucketName)  .object(objectName)  .stream(stream, stream.available(), -1)  .build());  }   // 删除文件  public void deleteFile(String objectName) throws InvalidKeyException, NoSuchAlgorithmException, InsufficientDataException, IOException, NoResponseException, XmlPullParserException, ErrorResponseException, InternalException {  minioClient.removeObject(RemoveObjectArgs.builder()  .bucket(bucketName)  .object(objectName)  .build());  }   // 下载文件  public InputStream downloadFile(String objectName) throws InvalidKeyException, NoSuchAlgorithmException, InsufficientDataException, IOException, NoResponseException, XmlPullParserException, ErrorResponseException, InternalException {  return minioClient.getObject(GetObjectArgs.builder()  .bucket(bucketName)  .object(objectName)  .build());  }  }

   

在上面的代码中,我们创建了一个 MinioUtils 工具类,其中包含了一些常用的 MinIO 操作方法。其中包括检查桶是否存在、创建桶、列出所有桶、上传文件、删除文件和下载文件等操作。

在这个示例中,我们使用 Spring 的 @Value 注解来注入连接到 Min


/template/Home/leiyu/PC/Static