MinIO对象存储
2025年4月9日大约 2 分钟
MinIO对象存储
什么是对象存储?
对象存储(Object Storage Service,OSS),也叫基于对象的存储,是一种解决和处理离散单元的方法,可提供基于分布式系统之上的对象形式的数据存储服务。
MinIO安装
官方文档:MinIO | 高性能、支持原生 Kubernetes的对象存储
推荐使用docker进行部署:
1、拉取docker镜像
docker pull minio/minio
2、设置minio用到的文件路径
mkdir minio
进入minio目录
cd minio
创建minio数据目录
mkdir data
创建minio配置目录
mkdir config
3、启动服务
账号密码是:admin admin123
单独设置console端口
docker run --name minio \
-p 9000:9000 \
-p 9999:9999 \
-d --restart=always \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=admin123" \
-v /home/minio/data:/data \
-v /home/minio/config:/root/.minio \
minio/minio server /data \
--console-address '0.0.0.0:9999'
4、防火墙设置
firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --zone=public --add-port=9999/tcp --permanent
firewall-cmd --reload
5、登录客户端
使用刚刚的console-address的9999端口去登录
这里网页的端口是9999,而api访问的端口就是9000
ok这样就完成了

使用Java操作minio
maven导入
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.4.3</version>
</dependency>
API测试代码 上传文件
public class Main {
public static void main(String[] args) throws IOException, ServerException, InsufficientDataException, ErrorResponseException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
System.out.println("Hello world!");
MinioClient client = MinioClient.builder()
.endpoint("http://localhost:9000")
.credentials("admin","admin123")
.build();
File file = new File("C:\\Users\\Chains\\Downloads\\头像.jpg");
FileInputStream stream = new FileInputStream(file);
PutObjectArgs put = PutObjectArgs.builder()
.bucket("springboot-vue3-jwt")
.object("test.jpg")
.stream(stream,file.length(),-1)
.build();
client.putObject(put);
}
}
使用SpringBoot3.0 集成MinIO
第一部添加maven依赖
编辑配置文件
@Configuration
public class MinioConfiguration {
@Bean
public MinioClient minioClient(){
MinioClient client = MinioClient.builder()
.endpoint("http://localhost:9000")
.credentials("admin","admin123")
.build();
return client;
}
}
编写文件上传下载接口
package com.example.minio.controller;
import io.minio.GetObjectArgs;
import io.minio.GetObjectResponse;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import io.minio.errors.*;
import jakarta.annotation.Resource;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.UUID;
@RestController
@RequestMapping("/")
public class FileController {
@Resource
MinioClient client;
@PostMapping("upload")
public String upload(@RequestParam("file")MultipartFile file) throws IOException, ServerException, InsufficientDataException, ErrorResponseException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
InputStream inputStream = file.getInputStream();
String name = UUID.randomUUID().toString();
PutObjectArgs put = PutObjectArgs.builder()
.bucket("test")
.object("upload/"+name)
.stream(inputStream, file.getSize(), -1)
.build();
client.putObject(put);
return name;
}
@GetMapping("download/{name}")
public void download(@PathVariable("name") String name, HttpServletResponse response) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
GetObjectResponse object = client.getObject(GetObjectArgs.builder().bucket("test").object("upload/" + name).build());
ServletOutputStream outputStream = response.getOutputStream();
outputStream.write(object.readAllBytes());
}
}