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

本文涉及的产品
数据管理 DMS,安全协同 3个实例 3个月
推荐场景:
学生管理系统数据库
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
简介: Spring Boot 玩转 MinIO:轻松搭建分布式对象存储系统,提升数据管理效率

MinIO 简介

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

Spring Boot 整合 MinIO

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

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

<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>8.2.6</version>
</dependency>

接下来,我们需要在 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 List<Bucket> listBuckets() 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

目录
相关文章
|
1月前
|
小程序 Java
基于springboot的医护人员排班系统
基于springboot的医护人员排班系统
29 0
|
1天前
|
XML Java 数据格式
手写spring第八章-定义标记类型Aware接口,实现感知容器对象
手写spring第八章-定义标记类型Aware接口,实现感知容器对象
4 0
|
1天前
|
XML Java 数据格式
手写spring第七章-完成便捷实现bean对象初始化和销毁方法
手写spring第七章-完成便捷实现bean对象初始化和销毁方法
6 0
|
4天前
|
Dubbo Java 应用服务中间件
Java从入门到精通:3.2.2分布式与并发编程——了解分布式系统的基本概念,学习使用Dubbo、Spring Cloud等分布式框架
Java从入门到精通:3.2.2分布式与并发编程——了解分布式系统的基本概念,学习使用Dubbo、Spring Cloud等分布式框架
|
8天前
|
小程序 JavaScript Java
基于SpringBoot+Vue+uniapp微信小程序的医院核酸检测服务系统的详细设计和实现
基于SpringBoot+Vue+uniapp微信小程序的医院核酸检测服务系统的详细设计和实现
34 0
|
8天前
|
分布式计算 Ubuntu 调度
如何本地搭建开源分布式任务调度系统DolphinScheduler并远程访问
如何本地搭建开源分布式任务调度系统DolphinScheduler并远程访问
|
9天前
|
人工智能 移动开发 前端开发
Springboot医院智慧导诊系统源码:精准推荐科室
医院智慧导诊系统是在医疗中使用的引导患者自助就诊挂号,在就诊的过程中有许多患者不知道需要挂什么号,要看什么病,通过智慧导诊系统,可输入自身疾病的症状表现,或选择身体部位,在经由智慧导诊系统多维度计算,精准推荐科室,引导患者挂号就诊,实现科学就诊,不用担心挂错号。
18 2
|
10天前
|
人工智能 前端开发 Java
Java语言开发的AI智慧导诊系统源码springboot+redis 3D互联网智导诊系统源码
智慧导诊解决盲目就诊问题,减轻分诊工作压力。降低挂错号比例,优化就诊流程,有效提高线上线下医疗机构接诊效率。可通过人体画像选择症状部位,了解对应病症信息和推荐就医科室。
151 10
|
10天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
11天前
|
存储 数据可视化 安全
Java全套智慧校园系统源码springboot+elmentui +Quartz可视化校园管理平台系统源码 建设智慧校园的5大关键技术
智慧校园指的是以物联网为基础的智慧化的校园工作、学习和生活一体化环境,这个一体化环境以各种应用服务系统为载体,将教学、科研、管理和校园生活进行充分融合。无处不在的网络学习、融合创新的网络科研、透明高效的校务治理、丰富多彩的校园文化、方便周到的校园生活。简而言之,“要做一个安全、稳定、环保、节能的校园。
37 6