获课地址:789it.top/13655/
MinIO 是一个高性能的分布式对象存储系统,兼容 Amazon S3 API,适合存储非结构化数据(如图片、视频、日志等)。以下是 MinIO 分布式存储从 0 到与 Vue + Spring Boot 整合开发的完整指南。
1. MinIO 简介
- 特点:
- 高性能:支持高并发读写。
- 分布式:支持多节点部署,数据自动分片和冗余。
- 兼容 S3:完全兼容 Amazon S3 API。
- 开源:基于 Apache License 2.0 开源。
- 使用场景:
- 文件存储与分享。
- 大数据存储与分析。
- 备份与归档。
2. MinIO 安装与部署
2.1 单节点部署
- 下载 MinIO
- 访问 MinIO 官网 下载对应操作系统的二进制文件。
- 或使用 Docker 部署:
- bash
- 复制
- docker run -p 9000:9000 -p 9001:9001 minio/minio server /data --console-address ":9001"
- 启动 MinIO
- 命令行启动:
- bash
- 复制
- ./minio server /data
- 访问控制台:http://localhost:9000,默认用户名 minioadmin,密码 minioadmin。
2.2 分布式部署
- 准备多台服务器(至少 4 台)。
- 启动 MinIO 集群:
- bash
- 复制
- ./minio server http://node1/data http://node2/data http://node3/data http://node4/data
- 访问控制台:通过任意节点的 IP 和端口访问。
3. MinIO 基本操作
3.1 使用 MinIO 控制台
- 创建 Bucket(存储桶)。
- 上传、下载、删除文件。
- 设置 Bucket 的访问权限。
3.2 使用 MinIO 客户端(mc)
- 安装 mc:
- bash
- 复制
- wget https://dl.min.io/client/mc/release/linux-amd64/mc chmod +x mc ./mc --help
- 配置 MinIO 服务器:
- bash
- 复制
- ./mc alias set myminio http://localhost:9000 minioadmin minioadmin
- 常用命令:
- 列出 Bucket:
- bash
- 复制
- ./mc ls myminio
- 上传文件:
- bash
- 复制
- ./mc cp myfile.txt myminio/mybucket/
- 下载文件:
- bash
- 复制
- ./mc cp myminio/mybucket/myfile.txt ./
4. Spring Boot 整合 MinIO
4.1 添加依赖
在 pom.xml 中添加 MinIO 客户端依赖:
xml
复制
io.minio
minio
8.5.2
运行 HTML
4.2 配置 MinIO 客户端
在 application.yml 中配置 MinIO 连接信息:
yaml
复制
minio:
endpoint: http://localhost:9000
accessKey: minioadmin
secretKey: minioadmin
bucket: mybucket
4.3 创建 MinIO 工具类
java
复制
import io.minio.*;
import io.minio.errors.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.io.InputStream;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
@Component
public class MinioUtil {
@Value("${minio.endpoint}")
private String endpoint;
@Value("${minio.accessKey}")
private String accessKey;
@Value("${minio.secretKey}")
private String secretKey;
@Value("${minio.bucket}")
private String bucket;
private MinioClient minioClient;
@PostConstruct
public void init() {
minioClient = MinioClient.builder()
.endpoint(endpoint)
.credentials(accessKey, secretKey)
.build();
}
// 上传文件
public void uploadFile(String objectName, InputStream inputStream) throws Exception {
minioClient.putObject(
PutObjectArgs.builder()
.bucket(bucket)
.object(objectName)
.stream(inputStream, -1, 10485760) // 10MB 分片
.build());
}
// 下载文件
public InputStream downloadFile(String objectName) throws Exception {
return minioClient.getObject(
GetObjectArgs.builder()
.bucket(bucket)
.object(objectName)
.build());
}
// 删除文件
public void deleteFile(String objectName) throws Exception {
minioClient.removeObject(
RemoveObjectArgs.builder()
.bucket(bucket)
.object(objectName)
.build());
}
}
4.4 创建文件上传接口
java
复制
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
@RestController
@RequestMapping("/file")
public class FileController {
@Autowired
private MinioUtil minioUtil;
@PostMapping("/upload")
public String uploadFile(@RequestParam("file") MultipartFile file) {
try {
String fileName = file.getOriginalFilename();
InputStream inputStream = file.getInputStream();
minioUtil.uploadFile(fileName, inputStream);
return "文件上传成功:" + fileName;
} catch (Exception e) {
return "文件上传失败:" + e.getMessage();
}
}
}
5. Vue 前端整合
5.1 安装依赖
使用 Axios 进行文件上传:
bash
复制
npm install axios
5.2 文件上传组件
vue
复制
{{ message }}
<script>
import axios from 'axios';
export default {
data() {
return {
file: null,
message: '',
};
},
methods: {
handleFileChange(event) {
this.file = event.target.files[0];
},
async uploadFile() {
if (!this.file) {
this.message = '请选择文件';
return;
}
const formData = new FormData();
formData.append('file', this.file);
try {
const response = await axios.post('http://localhost:8080/file/upload', formData, {
headers: {
'Content-Type': 'multipart/form-data',
},
});
this.message = response.data;
} catch (error) {
this.message = '上传失败:' + error.message;
}
},
},
};
</script>
6. 测试与部署
- 启动 Spring Boot 应用。
- 启动 Vue 前端:
- bash
- 复制
- npm run serve
- 访问前端页面,上传文件并验证 MinIO 存储。
总结
通过以上步骤,你可以从 0 开始搭建 MinIO 分布式存储,并整合 Vue + Spring Boot 实现文件上传与管理。MinIO 的高性能和易用性使其成为分布式存储的理想选择,适合各种规模的应用程序。
本文暂时没有评论,来添加一个吧(●'◡'●)