使用分布式文件系统minio实现文件上传
一.分布式文件系统
分布式文件系统将数据存储在物理上分散的多个存储节点上,对这些节点的资源进行统一的管理与分配,并向用户提供文件系统访问接口。它解决了本地文件系统在文件大小、文件数量、打开文件数等方面的限制问题,让文件系统更易扩容、配置、共享和管理

二.Minio介绍
采用MinIO构建分布式文件系统,MinIO 是一个非常轻量的服务,可以很简单的和其他应用的结合使用,它兼容亚马逊 S3 云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。
它一大特点就是轻量,使用简单,功能强大,支持各种平台,单个文件最大5TB,兼容 Amazon S3接口,提供了 Java、Python、GO等多版本SDK支持。
中文:https://www.minio.org.cn/,http://docs.minio.org.cn/docs/
我们可以通过使用minio模拟实现分布式存储的形式,我们在本机上创建四个文件夹用来支持本机的单节点minio。
删除其中任意文件夹下的文件,在五秒内minio会自动从其他节点上重新同步内容。minio最多容忍一半数量的节点宕机。
三.操作步骤
1.可以从官网上下载minio安装包或者使用我所提供的资源。
2.新建minio_data文件夹,在目录下创建四个文件夹,用来充当文件系统。

3.解压并打开minio安装路径,在路径下启动命令行窗口
输入以下命令(将四个文件路径替换为你的路径)
minio.exe server D:\minio_data\data1 D:\minio_data\data2 D:\minio_data\data3 D:\minio_data\data4
回车执行:

minio会自动扫描你的ip地址条目,并默认监听9000号端口。
4.在浏览器访问:127.0.0.1:9000 (或上图中API中的任意域名端口)

输入“minioadmin”,用户名密码默认都是minioadmin
进入界面在Buckets下点击“Create Bucket”

输入bucket名为test,点击创建

修改bucket访问权限



5.打开idea
引入依赖
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.4.3</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.8.1</version>
</dependency>
编写测试类
package com.xuecheng.media;
import io.minio.BucketExistsArgs;
import io.minio.MakeBucketArgs;
import io.minio.MinioClient;
import io.minio.UploadObjectArgs;
import io.minio.errors.MinioException;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
/**
* @description 测试MinIO
* @date 2025/3/31 17:42
* @version 1.0
*/
public class MinioTest {
static MinioClient minioClient =
MinioClient.builder()
.endpoint("http://127.0.0.1:9000")
.credentials("minioadmin", "minioadmin")
.build();
//上传文件
@Test
@Test
public void upload() {
//根据扩展名取出mimeType
ContentInfo extensionMatch = ContentInfoUtil.findExtensionMatch(".mp4");
String mimeType = MediaType.APPLICATION_OCTET_STREAM_VALUE;//通用mimeType,字节流
if(extensionMatch!=null){
mimeType = extensionMatch.getMimeType();
}
try {
UploadObjectArgs testbucket = UploadObjectArgs.builder()
.bucket("testbucket")
.object("001/test001.mp4") //001表示目录,test001.mp4表示创建的文件名
.filename("D:\\develop\\upload\\1mp4.temp")//选择你本地的任意文件
.contentType(mimeType)//默认根据扩展名确定文件内容类型,也可以指定
.build();
minioClient.uploadObject(testbucket);
System.out.println("上传成功");
} catch (Exception e) {
e.printStackTrace();
System.out.println("上传失败");
}
}
}
6.执行测试
观察控制台输出结果
打开minio管理端
打开test桶
出现类似以下结果表明上传成功

删除和查询操作不再进行展示,具体操作见
删除:https://docs.min.io/docs/java-client-api-reference#removeObject
查询:https://docs.min.io/docs/java-client-api-reference#getObject
更多推荐

所有评论(0)