【Java项目】Minio的安装部署以及SpringBoot整合Minio

简介: 【Java项目】Minio的安装部署以及SpringBoot整合Minio

前言

minio官方文档

minio中文文档

minio是什么就不多介绍了,直接看上面即可。只需要知道,在项目中需要使用文件存储服务但是又不想使用阿里云,七牛云,华为云等提供的收费的OSS服务,那么就可以考虑使用Minio来存储文件。

本文不讲解任何minio的相关知识,只包含Minio的使用,环境是Centos7。

项目使用的是单机版本的minio,不是分布式版本,因此没有检错纠错数据还原的功能

安装与部署

首先是安装

按照官方文档一样,下载minio并且启动运行

wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
#启动minio server服务,指定数据存储目录/mnt/data
./minio server /mnt/data

安装和启动完毕之后,初始状态如下

同时注意看,这里还为我们提供了API以及Console的地址

我们想要使用MNIO的API来操控MINIO就需要用到这个端口和ip,ip就是这台服务器的ip

而如果我们想要在控制台看到minio,就使用Console后面为我们提供的端口即可。

这里需要注意,minio的控制台的端口是会动态改变的,所以下一次启动后就可能变化了,我们可以通过命令来设定,如下。

首先,minio的默认的配置目录是${HOME}/.minio,可以通过–config-dir命令自定义配置目录

./minio server --config-dir /mnt/config /mnt/data

控制台监听端口是动态生成的,可以通过–console-address “:port”指定静态端口,方式如下

./minio server --console-address ":46021" /mnt/data

设定用户名和密码的方式如下,这里minio要求用户名长度大于3个字符,密码大于8个字符。

如果配置了这两个环境变量,就不会出现红色警告

账号和密码就是人家给你的,端口用人家给你的即可

之后我们可以先创建一个bucket,它具有隔离的特性,并且它是顶级目录

然后我们查看一下对应的挂载目录

上面的版本使用的是手动下载,我们也可以使用docker

docker安装单机版minio

# 在docker里面下载minio
docker pull bitnami/minio
# 之后使用docker run命令来运行minio
docker run -dt                                  \
  -p 9000:9000 -p 46021:46021                     \
  -e "MINIO_ROOT_USER=towelove"     \
  -e "MINIO_ROOT_PASSWORD=towelove"     \
  -v /mnt/data:/data                              \
  -v /mnt/config:/root/.minio         \
  --name "minio_local"                          \
  bitnami/minio:latest server --console-address ":46021"

如果说想要部署分布式的minio,你需要很多个minio的节点,并且确保他们是可以互相通信的。然后在着每一个服务器上部署完毕minio之后,按照如下方式,就可以获取一个minio的分布式集群,部署集群能获得特别好的效果速度以及安全性,但是很麻烦,这里就单机使用就好了,主要是为了下面整合SpringBoot项目使用

minio server http://192.168.146.11/data1  http://192.168.146.12/data2
 http://192.168.146.13/data3  http://192.168.146.14/data4

MC下载

wget  http://dl.min.io/client/mc/release/linux-arm64/mc

SpringBoot整合Minio

SpringBoot的版本是2.7.7,然后导入如下依赖即可

如果在运行过程中出现其他报错,可以百度或者看看报错是否和我其他博客中出现的一样,Minio的坑还是很多的

<dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
            <version>8.4.3</version>
        </dependency>
        <dependency>
            <groupId>me.tongfei</groupId>
            <artifactId>progressbar</artifactId>
            <version>0.5.3</version>
        </dependency>
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>4.8.1</version>
        </dependency>

首先在配置文件中引入你minio的url,并且提供密码以及对应的桶名称

package com.towelove.file.service.impl;
import com.towelove.file.config.MinioConfig;
import com.towelove.file.service.ISysFileService;
import com.towelove.file.utils.FileUploadUtils;
import io.minio.BucketExistsArgs;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
/**
 * Minio 文件存储
 *
 * @author 张锦标
 */
@Service
public class MinioSysFileServiceImpl implements ISysFileService {
    @Autowired
    private MinioConfig minioConfig;
    @Autowired
    private MinioClient minioClient;
    /**
     * 本地文件上传接口
     *
     * @param file 上传的文件
     * @return 访问地址
     * @throws Exception
     */
    @Override
    public String uploadFile(MultipartFile file) throws Exception {
        String fileName = FileUploadUtils.extractFilename(file);
        //判断桶是否存在
        boolean found =
                minioClient.bucketExists(BucketExistsArgs.builder()
                        .bucket(minioConfig.getBucketName()).build());
        if (found) {
            InputStream is = file.getInputStream();
            System.out.println("my-bucketname exists");
            PutObjectArgs args = PutObjectArgs.builder()
                    .bucket(minioConfig.getBucketName())
                    .object(fileName)
                    .stream(is, file.getSize(), -1)
                    .contentType(file.getContentType())
                    .build();
            minioClient.putObject(args);
            is.close();
            return minioConfig.getUrl() + "/" + minioConfig.getBucketName() + "/" + fileName;
        } else {
            System.out.println("my-bucketname does not exist");
            throw new RuntimeException("my-bucketname " + minioConfig.getBucketName()
                    + " does not exist");
        }
    }
}

之后就可以使用apifox进行测试了


相关文章
|
11月前
|
IDE 安全 Java
Lombok 在企业级 Java 项目中的隐性成本:便利背后的取舍之道
Lombok虽能简化Java代码,但其“魔法”特性易破坏封装、影响可维护性,隐藏调试难题,且与JPA等框架存在兼容风险。企业级项目应优先考虑IDE生成、Java Records或MapStruct等更透明、稳健的替代方案,平衡开发效率与系统长期稳定性。
657 115
|
11月前
|
存储 小程序 Java
热门小程序源码合集:微信抖音小程序源码支持PHP/Java/uni-app完整项目实践指南
小程序已成为企业获客与开发者创业的重要载体。本文详解PHP、Java、uni-app三大技术栈在电商、工具、服务类小程序中的源码应用,提供从开发到部署的全流程指南,并分享选型避坑与商业化落地策略,助力开发者高效构建稳定可扩展项目。
|
11月前
|
安全 Java API
Java Web 在线商城项目最新技术实操指南帮助开发者高效完成商城项目开发
本项目基于Spring Boot 3.2与Vue 3构建现代化在线商城,涵盖技术选型、核心功能实现、安全控制与容器化部署,助开发者掌握最新Java Web全栈开发实践。
851 1
|
12月前
|
前端开发 Java API
2025 年 Java 全栈从环境搭建到项目上线实操全流程指南:Java 全栈最新实操指南(2025 版)
本指南涵盖2025年Java全栈开发核心技术,从JDK 21环境搭建、Spring Boot 3.3实战、React前端集成到Docker容器化部署,结合最新特性与实操流程,助力构建高效企业级应用。
3197 1
|
JavaScript Java 微服务
现代化 Java Web 在线商城项目技术方案与实战开发流程及核心功能实现详解
本项目基于Spring Boot 3与Vue 3构建现代化在线商城系统,采用微服务架构,整合Spring Cloud、Redis、MySQL等技术,涵盖用户认证、商品管理、购物车功能,并支持Docker容器化部署与Kubernetes编排。提供完整CI/CD流程,助力高效开发与扩展。
1179 64
|
Java 测试技术 Spring
简单学Spring Boot | 博客项目的测试
本内容介绍了基于Spring Boot的博客项目测试实践,重点在于通过测试驱动开发(TDD)优化服务层代码,提升代码质量和功能可靠性。案例详细展示了如何为PostService类编写测试用例、运行测试并根据反馈优化功能代码,包括两次优化过程。通过TDD流程,确保每项功能经过严格验证,增强代码可维护性与系统稳定性。
448 0
|
存储 Java 数据库连接
简单学Spring Boot | 博客项目的三层架构重构
本案例通过采用三层架构(数据访问层、业务逻辑层、表现层)重构项目,解决了集中式开发导致的代码臃肿问题。各层职责清晰,结合依赖注入实现解耦,提升了系统的可维护性、可测试性和可扩展性,为后续接入真实数据库奠定基础。
889 0
|
安全 JavaScript Java
java Web 项目完整案例实操指南包含从搭建到部署的详细步骤及热门长尾关键词解析的实操指南
本项目为一个完整的JavaWeb应用案例,采用Spring Boot 3、Vue 3、MySQL、Redis等最新技术栈,涵盖前后端分离架构设计、RESTful API开发、JWT安全认证、Docker容器化部署等内容,适合掌握企业级Web项目全流程开发与部署。
1078 0
|
JSON 分布式计算 大数据
springboot项目集成大数据第三方dolphinscheduler调度器
springboot项目集成大数据第三方dolphinscheduler调度器
818 3
|
Java 关系型数据库 数据库连接
Spring Boot项目集成MyBatis Plus操作PostgreSQL全解析
集成 Spring Boot、PostgreSQL 和 MyBatis Plus 的步骤与 MyBatis 类似,只不过在 MyBatis Plus 中提供了更多的便利功能,如自动生成 SQL、分页查询、Wrapper 查询等。
1096 2