MinIO的安装与使用
目录
1、安装MinIO
1.1 下载 MinIO 可执行文件
1.2 检查 MinIO 是否安装成功
1.3 设置数据存储目录
1.4 配置环境变量(可选)
1.5 编写启动的脚本
1.6 开放端口
1.7 访问
2、项目实战
2.1 引入依赖
2.2 配置yml文件
2.3 编写Minio配置类
2.4 编写Minio操作类
2.5 业务类
2.6 测试
1、安装MinIO
1.1 下载 MinIO 可执行文件
首先,下载 MinIO 的最新版本。你可以从 MinIO 官网下载或者使用 wget
直接下载。以下是使用 wget
下载并安装的步骤。
# 下载 MinIO 的可执行文件
wget https://dl.min.io/server/minio/release/linux-amd64/minio
# 为 MinIO 可执行文件添加执行权限
chmod +x minio
# 将 MinIO 移动到系统的可执行路径(例如 /usr/local/bin)
sudo mv minio /usr/local/bin/
1.2 检查 MinIO 是否安装成功
通过以下命令验证 MinIO 是否安装成功:
minio --version
如果安装成功,您会看到 MinIO 的版本信息。
1.3 设置数据存储目录
选择一个目录来存储 MinIO 的数据。例如,创建一个 /app/minio/data(这是我的目录,自行修改)
目录用于 MinIO 存储。
sudo mkdir /app/minio/data
1.4 配置环境变量(可选)
可以通过设置环境变量来配置 MinIO 的 MINIO_ROOT_USER
和 MINIO_ROOT_PASSWORD
,这些凭证会用于访问 MinIO Web 控制台和 API。
export MINIO_ROOT_USER="***"
export MINIO_ROOT_PASSWORD="****"
1.5 编写启动的脚本
vim minio.sh
#!/bin/bash
#nohup启动服务 指定文件存放路径/app/minio/data 还有设置日志文件路径/app/minio/minio.log
nohup ./minio server --address :9000 --console-address :9001 /app/minio/data > /app/minio/minio.log 2>&1 &
注意:
1.--address指定了minio的api端口,--console-address指定了minio的可视化管理界面的端口!
2.如果1.4没有执行也可以把1.4的环境变量写在启动的脚本里面 !
3.指定了1.3里面创建的数据存储路径并生成日志文件!
# 赋权
chmod +x minio.sh
# 启动脚本
./minio.sh
#查看日志
cat /app/minio/minio.log
1.6 开放端口
systemctl start firewalld && firewall-cmd --permanent --add-port=9001/tcp && firewall-cmd --reload && firewall-cmd --query-port=9001/tcp
systemctl start firewalld && firewall-cmd --permanent --add-port=9000/tcp && firewall-cmd --reload && firewall-cmd --query-port=9000/tcp
一定要开放9000和9001两个端口!
1.7 访问
http://ip:9001
如果1.3和1.4都没有配置环境变量,那么账号密码都为默认的minioadmin:minioadmin
2、项目实战
2.1 引入依赖
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.5.4</version>
</dependency>
<!-- minio8.3以上版本需要手动引入okhttp-->
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.9.3</version>
</dependency>
2.2 配置yml文件
####################################minio配置#################################
minio:
#此处需注意,需要配置minio的api的端口,配置可视化管理界面的端口会导致接口不报错但是文件操作不了
url: http://ip:9000
access-key: *****
secret-key: *****
bucket-name: ****
2.3 编写Minio配置类
package com.example.config;
import io.minio.MinioClient;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* <p>
* Minio配置类
* </p>
*
* @custom.date 2025/1/22 14:19
*/
@Data
@Configuration
public class MinioConfig {
/**
* 访问地址
*/
@Value("${minio.url}")
private String endpoint;
/**
* accessKey类似于用户ID,用于唯一标识你的账户
*/
@Value("${minio.access-key}")
private String accessKey;
/**
* secretKey是你账户的密码
*/
@Value("${minio.secret-key}")
private String secretKey;
/**
* 默认存储桶
*/
@Value("${minio.bucket-name}")
private String bucketName;
@Bean
public MinioClient minioClient() {
return MinioClient.builder()
.endpoint(endpoint)
.credentials(accessKey, secretKey)
.build();
}
}
2.4 编写Minio操作类
package com.example.config;
import io.minio.*;
import io.minio.errors.*;
import io.minio.http.Method;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.io.InputStream;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
@Component
@Configuration
public class MinioTemplate {
public MinioTemplate() {}
@Autowired
private MinioConfig minioConfig;
@Autowired
private MinioClient minioClient;
public void createBucket(String bucketName) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
MinioClient minioClient = this.minioClient;
if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) {
minioClient.makeBucket(
MakeBucketArgs.builder()
.bucket(bucketName)
.build());
}
}
/**
* 获取文件外链
* @param bucketName bucket 名称
* @param objectName 文件名称
* @return
*/
public String getObjectURL(String bucketName,String objectName) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
return this.minioClient.getPresignedObjectUrl(
GetPresignedObjectUrlArgs.builder()
.method(Method.GET)
.bucket(bucketName)
.object(objectName)
.build());
}
/**
* 获取文件
* @param bucketName
* @param objectName
* @return
*/
public InputStream getObject(String bucketName,String objectName) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
return this.minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(objectName).build());
}
/**
* 上传文件
* @param bucketName
* @param objectName
* @param stream
*/
public void putObject(String bucketName, String objectName, InputStream stream) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
//createBucket(bucketName);
this.minioClient.putObject(
PutObjectArgs.builder()
.bucket(bucketName)
.object(objectName)
.stream(stream, stream.available(), -1)
.build());
}
/**
* 删除文件
* @param bucketName
* @param objectName
*/
public void removeObject(String bucketName, String objectName) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
this.minioClient.removeObject(RemoveObjectArgs.builder()
.bucket(bucketName)
.object(objectName)
.build());
}
/**
* 下载文件
* @param bucketName
* @param objectName
*/
public InputStream downloadFile(String bucketName,String objectName) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
return this.minioClient.getObject(GetObjectArgs.builder()
.bucket(bucketName)
.object(objectName)
.build());
}
}
2.5 业务类
package com.example.service;
import com.example.config.MinioTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.InputStream;
@Service
public class MinioStorageService {
@Autowired
private MinioTemplate minioTemplate;
@Value("${minio.bucket-name}")
private String bucketName;
/**
* 获取文件外链
*
* @param objectName 文件名称
*/
public String getObjectURL(String objectName) {
try {
return minioTemplate.getObjectURL(bucketName, objectName);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public String uploadFile(InputStream inputStream, String filePath) {
String path = null;
try {
minioTemplate.putObject(bucketName, filePath, inputStream);
path = filePath;
} catch (Exception e) {
}
return path;
}
public InputStream downloadFile(String filePath) {
InputStream inputStream = null;
try {
inputStream = minioTemplate.getObject(bucketName, filePath);
} catch (Exception e) {
e.printStackTrace();
}
return inputStream;
}
public void removeFile(String filePath){
try{
minioTemplate.removeObject(bucketName,filePath);
}catch (Exception e){
e.printStackTrace();
}
}
public void createBucket(String bucketName) {
try {
minioTemplate.createBucket(bucketName);
} catch (Exception e) {
e.printStackTrace();
}
}
}
2.6 测试
package com.example.controller;
import com.example.service.MinioStorageService;
import io.minio.errors.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
@RestController
public class MinioController {
@Autowired
private MinioStorageService minioStorageService;
@RequestMapping("/createBucket")
public void createBucket(@RequestParam("bucketName") String bucketName) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
minioStorageService.createBucket(bucketName);
}
@RequestMapping("/uploadFile")
public void uploadFile(@RequestParam("file") MultipartFile file,@RequestParam("fileName") String fileName) throws IOException {
minioStorageService.uploadFile(file.getInputStream(),fileName);
}
}
上传成功后可以在控制台中看到这个文件 。