项目上传文件集成一下Minio,下面是我在项目中集成Minio的全过程。
首先介绍一下Minio:MinIO是高性能的对象存储,单个对象最大可达5TB。适合存储图片、视频、文档、备份数据、安装包等一系列文件。是一款主要采用Golang语言实现发开的高性能、分布式的对象存储系统。客户端支持Java,Net,Python,Javacript,Golang语言。客户端与服务器之间采用http/https通信协议。
官网:MinIO | S3 Compatible Storage for AI
一:安装Minio
1:下载Minio
cd /usr/local/download
wget https://dl.minio.org.cn/server/minio/release/linux-amd64/minio
2:授权
chmod +x minio
3:启动Minio
/usr/local/download/minio server --console-address :9001 --address 0.0.0.0:9002 /usr/local/minio/data > /usr/local/minio/log/minio.log
# /usr/local/download/minio minio文件
# --console-address :9001 控制台端口
# --address 0.0.0.0:9002 服务端口
# /usr/local/minio/data 数据目录
# /usr/local/minio/log/minio.log 日志目录
启动成功如下图所示:
4:浏览器访问:
http://1.15.157.156:9001/login
5:创建service服务文件
touch /usr/lib/systemd/system/minio.service
文件内容如下:
[Unit]
Description=Minio
Documentation=https://docs.minio.io
Wants=network-online.target
After=network-online.target
#minio文件具体位置
AssertFileIsExecutable=/usr/local/download/minio
[Service]
WorkingDirectory=/usr/local/minio/data
# User and group 用户/组
User=root
Group=root
PermissionsStartOnly=true
#创建的配置文件 minio.conf
EnvironmentFile=/etc/default/minio
ExecStartPre=/bin/bash -c "[ -n \"${MINIO_VOLUMES}\" ] || echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\""
# $MINIO_OPTS $MINIO_VOLUMES //这其实就是minio服务启动命令 /root/minio是服务位置 后面是端口号和数据存放目录
ExecStart=/usr/local/download/minio server $MINIO_OPTS $MINIO_VOLUMES
## 如果不用/etc/default/minio 默认配置,通过--confit-dir 指定自定义conf。 /path/to/minio 可执行文件路径,/path/to/config替换为MinIO的配置文件路径。
## ExecStart=/path/to/minio server --config-dir=/path/to/config
StandardOutput=journal
StandardError=inherit
# Specifies the maximum file descriptor number that can be opened by this process*
LimitNOFILE=65536
# Disable timeout logic and wait until process is stopped*
TimeoutStopSec=0
# SIGTERM signal is used to stop Minio*
KillSignal=SIGTERM
SendSIGKILL=no
SuccessExitStatus=0
[Install]
WantedBy=multi-user.target
文件编辑完成记得重载一下systemd
systemctl daemon-reload
6:创建环境变量
touch /etc/default/minio
内容如下:
# 设置用户名和密码
## 启动的时候看提示 新版本
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=xxxxxx
# 对应minio的安装目录位置
MINIO_VOLUMES="/usr/local/minio/data"
# 注意这里的ip要改成你们自己的ip地址, 这里的ip特别注意,需要内网ip,否则服务起不来。固定端口号设置,避免重启后 端口号随机
MINIO_OPTS="--address :9002 --console-address :9001"
# MINIO_SERVER_URL="http://minio.example.net:9000"
6:启动服务
#设置开机启动
systemctl enable minio.service
#启动服务
systemctl start minio.service
#停止服务
systemctl stop minio.service
#重启服务
systemctl restrat minio.service
#查看服务状态
systemctl status minio.service
二:springboot集成Minio
1:添加POM依赖
<!-- Minio依赖 -->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.2.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
2:配置application.yml
spring:
servlet:
multipart:
max-file-size: 10MB
max-request-size: 10MB
minio:
access-key: xxxxxxxxx#这个需要再控制台创建 ,后边有截图示例
secret-key: xxxxxxxxx#这个需要再控制台创建,后边有截图示例
url: http://1.15.157.156:9002
bucket-name: test # 登陆minio创建的文件桶
secure: false
image-size: 10485760
file-size: 1073741824
endpoint: http://1.15.157.156
port: 9000
3:Minio配置类MinioUtil
package com.springbootblog.utils;
import com.springbootblog.config.MinioProperties;
import io.minio.*;
import io.minio.http.Method;
import io.minio.messages.Bucket;
import io.minio.messages.DeleteError;
import io.minio.messages.DeleteObject;
import io.minio.messages.Item;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayInputStream;
import java