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

本文涉及的产品
对象存储 OSS,20GB 3个月
数据管理 DMS,安全协同 3个实例 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

相关实践学习
MySQL基础-学生管理系统数据库设计
本场景介绍如何使用DMS工具连接RDS,并使用DMS图形化工具创建数据库表。
目录
相关文章
|
1月前
|
存储 Java 文件存储
Spring Boot 3 整合 Minio 实现文件存储
本文介绍了如何使用 Spring Boot 3 整合 MinIO 实现文件存储服务。MinIO 是一款高性能的对象存储服务器,适合大规模数据存储与分析,支持多种部署环境且文档完备、开源免费。从 MinIO 的快速安装、配置文件公开访问,到 Spring Boot 中集成 MinIO 客户端的步骤,包括创建用户访问密钥、引入依赖包、添加配置信息、编写 MinIO 客户端配置类及上传和预览文件的服务代码。最后通过 Apifox 进行文件上传测试,并验证文件是否成功存储及预览功能是否正常。关注公众号“Harry技术”,回复 minio 获取源码地址。
198 76
|
2天前
|
存储 安全 数据安全/隐私保护
4S店、分公司远程访问总部DMS系统,贝锐花生壳提供高性价比方案
在汽车销售与服务行业,DMS(经销商管理系统)是日常运营的重要工具,涵盖销售、库存、售后等模块。传统远程访问方案如专线或VPN成本高且复杂,而贝锐花生壳内网穿透提供了一种高效、安全、低成本的替代方案。无需公网IP和复杂配置,只需三步即可实现DMS系统的远程访问,并支持加密传输和精细访问控制,确保数据安全。
33 16
|
26天前
|
前端开发 JavaScript Java
springboot图书馆管理系统前后端分离版本
springboot图书馆管理系统前后端分离版本
39 12
|
24天前
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的大学生就业服务平台设计与实现(系统源码+文档+数据库+部署等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
63 6
|
24天前
|
JavaScript Java 测试技术
基于Java+SpringBoot+Vue实现的车辆充电桩系统设计与实现(系统源码+文档+部署讲解等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
55 6
|
24天前
|
JavaScript NoSQL Java
基于SpringBoot+Vue的班级综合测评管理系统设计与实现(系统源码+文档+数据库+部署等)
✌免费选题、功能需求设计、任务书、开题报告、中期检查、程序功能实现、论文辅导、论文降重、答辩PPT辅导、会议视频一对一讲解代码等✌
40 4
|
24天前
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的大学生体质测试管理系统设计与实现(系统源码+文档+数据库+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
36 2
|
1月前
|
存储 安全 Java
Spring Boot 3 集成Spring AOP实现系统日志记录
本文介绍了如何在Spring Boot 3中集成Spring AOP实现系统日志记录功能。通过定义`SysLog`注解和配置相应的AOP切面,可以在方法执行前后自动记录日志信息,包括操作的开始时间、结束时间、请求参数、返回结果、异常信息等,并将这些信息保存到数据库中。此外,还使用了`ThreadLocal`变量来存储每个线程独立的日志数据,确保线程安全。文中还展示了项目实战中的部分代码片段,以及基于Spring Boot 3 + Vue 3构建的快速开发框架的简介与内置功能列表。此框架结合了当前主流技术栈,提供了用户管理、权限控制、接口文档自动生成等多项实用特性。
81 8
|
2月前
|
存储 Java Spring
【Spring】获取Bean对象需要哪些注解
@Conntroller,@Service,@Repository,@Component,@Configuration,关于Bean对象的五个常用注解
|
2月前
|
存储 Java 应用服务中间件
【Spring】IoC和DI,控制反转,Bean对象的获取方式
IoC,DI,控制反转容器,Bean的基本常识,类注解@Controller,获取Bean对象的常用三种方式