Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Spring Boot 3 整合 minio 实现文件存储

Spring Boot 3 整合 minio 实现文件存储

作者头像
Harry技术
发布于 2025-01-13 08:11:35
发布于 2025-01-13 08:11:35
32100
代码可运行
举报
运行总次数:0
代码可运行

Spring Boot 3 整合 minio 实现文件存储

01、背景介绍

在软件系统的实际开发进程里,文件存储服务的使用常常是难以避免的。

就拿小型网站系统来说,一般情况下,会把文件存储服务和网站系统部署在同一台服务器上。这种做法在小成本资源投入方面确实具有一定优势。如果网站的访问量处于较低水平,这种方式基本不会引发什么问题。然而,随着网站访问量的逐步攀升,网站文件资源的读取操作变得越来越频繁。此时,单台服务器可能就无法承受如此大量的请求了,进而导致网站打不开或者出现系统异常等情况。

MinIO,作为一款被宣称是世界上速度最快的对象存储服务器,主要为大规模的数据存储和分析而精心打造。它具有很强的适应性,能够在多种环境下进行部署,像物理服务器、虚拟机、容器等都不在话下。更为重要的是,MinIO的技术文档十分完备,这就意味着使用者可以轻松上手。而且,对于个人用户而言,它完全是开源免费的。

今天这篇文章就将带大家一同探索如何运用MinIO搭建一套专属的云存储服务。

2、方案实践

2.1、minio 快速安装

windows 操作系统为例,安装请参考《Windows下Minio的安装以及基本使用》。

2.2.3、设置文件公开访问

默认创建的存储桶,都是私有桶,也就是说无法被公开访问。

minio设置文件公开访问

3、springBoot 集成 minio 实现文件存储

我们一起来看看,如何在 Spring Boot 工程中集成 minio 客户端以便实现文件存储服务。

3.1、创建用户访问密钥

MinIO 支持通过用户、密码来管理存储桶,我们可以利用 minio 客户端来实现文件的上传和下载。点击Access Keys菜单,创建用户名和密码并将其保存,下文会用到。

3.2、引入依赖包

在 Spring Boot 工程,引入 minio 客户端依赖包。我们可以去官网看找到最新的依赖。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>8.5.10</version>
</dependency>
3.3、添加相关配置

在application.properties文件中,添加 minio 相关的配置信息.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
minio.endpoint=http://127.0.0.1:9090
# 使用账号密码
#minio.access-key=minioadmin
#minio.secret-key=password

# 使用密钥
minio.access-key=eFbF9rSBtgfqiLGDcPDo
minio.secret-key=Sfgc06T1S6zhzVTzCwIFhr6KUs7zqCwOwFkHHez4
minio.bucket-name=harry

API: http://127.0.0.1:9090 RootUser: minioadmin RootPass: password 注意下这里,因为我们配置的端口是9090,所以这里是9090而不是9000,要不会出现io.minio.errors.InvalidResponseException: Non-XML response from server. Response code: 400, Content-Type: text/xml;......异常信息

3.4、编写 Minio 客户端配置类

基于上文的配置信息,编写 Minio 客户端配置类。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Configuration
public class MinioConfig {

    @Value("${minio.endpoint}")
    private String minioEndpoint;

    @Value("${minio.access-key}")
    private String minioAccessKey;

    @Value("${minio.secret-key}")
    private String minioSecretKey;

    @Bean
    public MinioClient minioClient() {
        return MinioClient.builder()
                .endpoint(minioEndpoint)
                .credentials(minioAccessKey, minioSecretKey)
                .build();
    }
}
3.5、编写上传和文件预览服务

接着利用 minioClient 客户端,编写上传和文件预览服务。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * @author harry
 * @公众号 Harry技术
 */
@RestController
publicclass FileController {
    @Value("${minio.bucket-name}")
    private String bucketName;

    @Autowired
    private MinioClient minioClient;

    /**
     * 文件上传
     */
    @PostMapping("/upload")
    public String upload(@RequestParam("file") MultipartFile file) {

        // 生成文件名(日期文件夹)
        String suffix = FileUtil.getSuffix(file.getOriginalFilename());
        String uuid = IdUtil.simpleUUID();
        String fileName = DateUtil.format(LocalDateTime.now(), "yyyyMMdd") + "/" + uuid + "." + suffix;
        //  try-with-resource 语法糖自动释放流
        try (InputStream inputStream = file.getInputStream()) {
            // 文件上传
            PutObjectArgs putObjectArgs = PutObjectArgs.builder()
                    .bucket(bucketName)
                    .object(fileName)
                    .contentType(file.getContentType())
                    .stream(inputStream, inputStream.available(), -1)
                    .build();
            minioClient.putObject(putObjectArgs);

            // 返回文件路径
            String fileUrl;
            GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs.builder()
                    .bucket(bucketName).object(fileName)
                    .method(Method.GET)
                    .build();

            fileUrl = minioClient.getPresignedObjectUrl(getPresignedObjectUrlArgs);
            fileUrl = fileUrl.substring(0, fileUrl.indexOf("?"));
            return fileUrl;
        } catch (Exception e) {
            e.printStackTrace();
            return e.getMessage();
        }
    }
}

3.6、使用Apifox上传

Apifox上传

返回图片地址:

http://127.0.0.1:9090/harry/20250109/0fd3f0df56674ede8be935951d3170cf.png

curl --location --request POST 'http://127.0.0.1:8080/upload' \ --header 'User-Agent: Apifox/1.0.0 (https://apifox.com)' \ --header 'Accept: /' \ --header 'Host: 127.0.0.1:8080' \ --header 'Connection: keep-alive' \ --header 'Content-Type: multipart/form-data; boundary=--------------------------602606623533285111744711' \ --form 'file=@"C:\Users\Admin\Downloads\微信截图_20250106132845.png"'

3.7、验证

回到 minio 控制台,可以看到刚刚上传的文件信息。

minio 控制台

2)文件预览地址验证

在浏览器端,访问http://127.0.0.1:9090/harry/20250109/0fd3f0df56674ede8be935951d3170cf.png预览地址,可以清晰的看到图片能正常展示。

总结

到这里,我们已经掌握了springBoot 整合 minio 实现文件存储的过程。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-01-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Harry技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
🗄️Spring Boot 3 整合 MinIO 实现分布式文件存储
文件存储已成为一个做任何应用都不可回避的需求。传统的单机文件存储方案在面对大规模数据和高并发访问时往往力不从心,而分布式文件存储系统则提供了更好的解决方案。本篇文章我将基于Spring Boot 3 为大家讲解如何基于MinIO来实现分布式文件存储。
别惹CC
2025/03/05
5491
🗄️Spring Boot 3 整合 MinIO 实现分布式文件存储
springboot整合minio
accessKey和secretKey需要根据启动的窗口上的值进行配置bucketName这个需要自己创建
java后端指南
2022/02/23
1.3K0
springboot整合minio
Spring Boot整合MinIO实现文件上传和下载
家人们啦!,上篇文章了,我们讲了如何使用docker-compose快速部署MinIO,在今天的文章中,我将向大家介绍如何将Spring Boot与MinIO进行无缝整合,以便高效地管理和操作文件存储。通过这个整合,你将能够轻松地在Spring Boot应用程序中实现文件的上传和下载等功能。让我们开始吧
修己xj
2023/08/25
1.1K0
Spring Boot整合MinIO实现文件上传和下载
MinIO服务部署指南
‌‌MinIO是一个基于‌Apache License v2.0开源协议的对象存储服务‌,它兼容‌亚马逊S3云存储服务接口,非常适合存储大容量非结构化的数据,如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,文件大小可以从几KB到最大5TB不等
ma布
2024/10/30
4430
MinIO服务部署指南
Spring Boot + MinIO 实现文件切片极速上传技术
在现代Web应用中,文件上传是一个常见的需求,尤其是对于大文件的上传,如视频、音频或大型文档。为了提高用户体验和系统性能,文件切片上传技术逐渐成为热门选择。本文将介绍如何使用Spring Boot和MinIO实现文件切片极速上传技术,通过将大文件分割成小片段并并行上传,显著提高文件上传速度。
IT_陈寒
2023/12/20
2.5K0
Spring Boot + MinIO 实现文件切片极速上传技术
SpringBoot 整合 Mini
这里把MinioClient注入到Bean中,后续使用MinioClient调用Minio的API。
阿珍
2024/10/28
1770
SpringBoot 整合 Mini
springboot集成minio,docker部署
知识浅谈
2023/09/25
3700
手把手教你SpringBoot轻松整合Minio实现文件上传下载
前面我们介绍了什么是分布式存储系统,介绍了什么是MinIO,最后如何使用MinIO构建分布式文件系统。那么怎么在实际的项目中使用MinIO呢?接下来就手把手教你如何在SpringBoot中轻松整合MinIO 。
章为忠学架构
2023/10/06
5.5K0
手把手教你SpringBoot轻松整合Minio实现文件上传下载
接入minio我来帮你做
​ hello,everyone。好久不见,相信大家日常开发工作中对于文件的存储,读取等都是有大大小小的需求的。在博主刚接触springboot的时候,比较喜欢把一些文件存储在linux的磁盘上,但是后面发现对于磁盘上的文件管理很麻烦。而且如果磁盘一旦损坏,那么存储在磁盘上的文件将会全部丢失。为了解决上面的需求与问题,本文将给大家带来分布式文件存储中间件-minio。
柏炎
2022/08/23
1.4K0
接入minio我来帮你做
SpringBoot整合Minio文件存储
公司的开发框架集成了附件本地存储,阿里云,华为云等,现项目有要求附件存储与应用部署环境不能是同一台服务器,也不能使用云存储,经过技术选型后决定框架整合minio,将minio部署在另一台服务器开通外网端口即可解决问题
code2roc
2023/07/19
5580
SpringBoot整合Minio文件存储
SpringBoot整合Minio对象存储服务
MinIO 是一款高性能、分布式的对象存储系统. 它是一款软件产品, 可以100%的运行在标准硬件。即X86等低成本机器也能够很好的运行MinIO。 MinIO与传统的存储和其他的对象存储不同的是:它一开始就针对性能要求更高的私有云标准进行软件架构设计。因为MinIO一开始就只为对象存储而设计。所以他采用了更易用的方式进行设计,它能实现对象存储所需要的全部功能,在性能上也更加强劲,它不会为了更多的业务功能而妥协,失去MinIO的易用性、高效性。 这样的结果所带来的好处是:它能够更简单的实现局有弹性伸缩能力的
甄士隐
2022/01/27
2.1K0
SpringBoot整合Minio对象存储服务
SpringBoot × MinIO 极速开发指南:对象存储服务高可用实战
MinIO的在Linux上的部署可以参考:MinIO在Linux上的安装与部署_minio linux部署-CSDN博客
摘星.
2025/05/20
1600
SpringBoot × MinIO 极速开发指南:对象存储服务高可用实战
SpringBoot 整合 Minio
MinIO 是一个基于 Go 实现的高性能、兼容 S3 协议的对象存储。它采用 GNU AGPL v3 开源协议,项目地址是 https://github.com/minio/minio 。
默存
2023/09/01
5920
SpringBoot 整合 Minio
SpringBoot整合Minio 项目中使用自己文件存储服务器
minio介绍: MinIO是根据GNU Affero通用公共许可证v3.0发布的高性能对象存储。 史上最详细Docker安装Minio
宁在春
2022/10/31
2.5K0
SpringBoot整合Minio 项目中使用自己文件存储服务器
minio | docker
在下是首席架构师
2023/10/25
4501
minio | docker
MinIO的使用(内含docker的简单使用)
MinIO 是全球领先的对象存储先锋,在标准硬件上,读/写速度上高达183 GB / 秒 和 171 GB / 秒。MinIO用作云原生应用程序的主要存储,与传统对象存储相比,云原生应用程序需要更高的吞吐量和更低的延迟。通过添加更多集群可以扩展名称空间,更多机架,直到实现目标。同时,符合一切原生云计算的架构和构建过程,并且包含最新的云计算的全新的技术和概念。
花花522
2023/03/07
4.5K0
MinIO的使用(内含docker的简单使用)
SpringBoot + Minio 实现文件切片极速上传技术(实战典藏版)
提示:请不要多个博客来回跳着看,此文章之详细绝无仅有,融合多家之长,如果遇见报错,请仔细捋一遍文章,不要忽略!我在写的时候因为许多文章不全面,来回跳遇见许多坑,希望大家可以避免,本文章中悉数做了标注提醒!!!
码猿技术专栏
2024/07/08
1.9K0
SpringBoot + Minio 实现文件切片极速上传技术(实战典藏版)
Spring Boot集成MinIO
在Spring Boot项目中集成MinIO(一个高性能的分布式对象存储服务)是一个相对简单的过程。以下是一个详细的步骤指南,帮助你完成这个集成。
科技新语
2024/12/02
4320
Spring Boot集成MinIO
前后端分离项目,如何优雅实现文件存储!
学习本文需要一些MinIO的基础知识,还不了解的小伙伴可以参考下:Github标星19K+Star,10分钟自建对象存储服务!
macrozheng
2020/02/10
3.2K1
springboot整合minio+vue实现大文件分片上传,断点续传(复制可用,包含minio工具类)
一只牛博
2025/05/31
3480
springboot整合minio+vue实现大文件分片上传,断点续传(复制可用,包含minio工具类)
推荐阅读
相关推荐
🗄️Spring Boot 3 整合 MinIO 实现分布式文件存储
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验