当前位置: 代码网 > it编程>编程语言>Java > SpringBoot3.X 整合 MinIO 存储原生方案

SpringBoot3.X 整合 MinIO 存储原生方案

2025年07月11日 Java 我要评论
springboot3.x整合minio存储原生方案:从环境搭建到实战开发一、前言:为什么选择minio?在分布式存储领域,minio作为一款高性能的对象存储服务,凭借兼容s3 api、轻量级部署、支

springboot3.x整合minio存储原生方案:从环境搭建到实战开发

一、前言:为什么选择minio?

在分布式存储领域,minio作为一款高性能的对象存储服务,凭借兼容s3 api、轻量级部署、支持分布式集群等特性,成为企业级文件存储的热门选择。尤其在springboot生态中,通过原生sdk整合minio可以快速实现文件的上传、下载、删除等功能,适用于云存储、大数据场景、内容管理系统等多种业务场景。

本文将基于springboot3.x版本,从零开始构建minio文件存储方案,涵盖环境准备、依赖配置、核心功能开发、进阶特性及问题排查,帮助开发者快速掌握原生整合方案。

二、环境准备

1. 基础环境清单

  • jdk 17+(springboot3.x最低要求)
  • maven 3.6+
  • minio服务(本文使用虚拟机部署的minio)
  • ide:intellij idea 2024.3

2. minio服务部署

如果没有现成的minio服务,可通过docker快速部署本地测试环境:

# 拉取镜像
mkdir -p /minio/data
 chmod 777 /minio/data
 docker run \-d --restart=always \--name minio \--hostname minio-server \
 -p 9000:9000 \-p 9001:9001 \-v /minio/data:/bitnami/minio/data \-e minio_root_user="minio_root" \-e minio_root_password="minio_123456" \-e minio_default_buckets="bucket" \-e "minio_server_url=http://192.168.229.128:9000" \
 bitnami/minio:2023.12.7

启动后访问http://192.168.229.128:9001,使用账号(minio_root)密码(minio_123456)登录控制台,创建本文所需的ai-pan桶(bucket)。

注意ip需要改成自己的,访问页面如下,输入账号密码,点击login

成功进入页面之后,创建我们的bucket

三、项目初始化与依赖配置

1. 创建springboot项目

通过spring initializr创建项目,选择以下依赖:

  • spring web(用于接口开发)
  • lombok(简化实体类代码)

2. 核心依赖引入

pom.xml中添加minio sdk依赖(注意版本兼容性,8.3.7兼容springboot3):

<dependency>
  <groupid>io.minio</groupid>
  <artifactid>minio</artifactid>
  <version>8.3.7</version>
</dependency>
<!-- 工具类依赖(非必需,用于文件路径处理) -->
<dependency>
  <groupid>cn.hutool</groupid>
  <artifactid>hutool-all</artifactid>
  <version>5.8.20</version>
</dependency>
<dependency>
			<groupid>org.projectlombok</groupid>
			<artifactid>lombok</artifactid>
			<version>1.18.30</version>
		</dependency>

四、配置详解

1. 核心配置文件(application.yml)

# minio核心配置
minio:
  endpoint: http://192.168.229.128:9000 # api访问地址
  access-key: minio_root # 访问密钥
  access-secret: minio_123456 # 密钥密码
  bucket-name: ai-pan # 创建的桶名称

2. minio配置类

import io.minio.minioclient;
import lombok.data;
import org.springframework.boot.context.properties.configurationproperties;
import org.springframework.context.annotation.bean;
import org.springframework.context.annotation.configuration;
@data
@component
@configurationproperties(prefix = "minio")
public class minioconfig {
    @value("endpoint")
    private string endpoint;
    @value("access-key")
    private string accesskey;
    @value("access-secret")
    private string accesssecret;
    @value("bucket-name")
    private string bucketname;
    // 预签名url过期时间(ms)
    private long pre_sign_url_expire = 60 * 10 * 1000l;
    @bean
    public minioclient getminioclient() {
        return minioclient.builder()
                .endpoint(endpoint)
                .credentials(accesskey, accesssecret)
                .build();
    }
}

五、核心功能开发

1. 工具类:文件路径生成

public class commonutil {
   public static string getfilepath(string filename) {
        string suffix = getfilesuffix(filename);
        // ⽣成⽂件在存储桶中的唯⼀键
        return strutil.format("{}/{}/{}/{}.{}", dateutil.thisyear(),
                dateutil.thismonth() + 1,dateutil.thisdayofmonth(), idutil.randomuuid(), suffix);
    }
}

2. 控制器(testcontroller)

@restcontroller
@requestmapping("/api/test/v1")
public class testcontroller {
    @autowired
    private minioconfig minioconfig;
    @autowired
    private minioclient minioclient;
    @postmapping("/upload")
    public jsondata upload(@requestparam("file") multipartfile file) {
        string filename = commonutil.getfilepath(file.getoriginalfilename());
        try {
            inputstream inputstream = file.getinputstream();
            minioclient.putobject(putobjectargs.builder()
                    .bucket(minioconfig.getbucketname())
                    .object(filename)
                    .stream(inputstream, file.getsize(), -1)
                    .contenttype(file.getcontenttype())
                    .build());
        } catch (exception e) {
            e.printstacktrace();
        }
      string url =  minioconfig.getendpoint() + "/" + minioconfig.getbucketname() +
                "/" + filename;
        return jsondata.buildsuccess(url);
    }
}
// 统一响应类
@data
public class jsondata {
    private int code;
    private string msg;
    private object data;
    public static jsondata buildsuccess(object data) {
        jsondata jsondata = new jsondata();
        jsondata.setcode(0);
        jsondata.setdata(data);
        return jsondata;
    }
}

六、测试与验证

1. 接口测试(apifox)

  • 文件上传
    • 请求方式:post
    • url:http://localhost:8081/api/test/v1/upload
    • 参数:form-data,key=file,value=选择本地文件
    • 响应:返回文件访问url

header需要我们选择如下

body需要我们选择如下,并上传本地文件

结果如下:

2. 控制台验证

登录minio控制台,进入ai-pan桶,查看上传的文件是否存在。

七、注意事项

桶权限管理

  • 若未设置桶为公开访问,直接访问url会报403错误,需使用预签名url(getpresigneddownloadurl方法)
  • 设置公开访问:在minio控制台→桶设置→访问策略→添加规则,允许所有人访问

八、总结

本文详细介绍了springboot3.x整合minio的原生方案,从环境搭建到核心功能实现,涵盖了文件上传、下载、删除等常用操作,并补充了异常处理、参数校验、安全实践等内容。通过原生sdk整合,开发者可以灵活定制存储逻辑,满足不同业务场景需求。

minio作为轻量级对象存储方案,非常适合中小规模项目使用,结合springboot的自动化配置,能大幅提升开发效率。后续可进一步扩展断点续传、文件预览、权限控制等功能,丰富存储服务的能力。

到此这篇关于springboot3.x 整合 minio 存储原生方案的文章就介绍到这了,更多相关springboot3.x minio 存储内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com