一.分布式文件系统

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

二.Minio介绍

        采用MinIO构建分布式文件系统,MinIO 是一个非常轻量的服务,可以很简单的和其他应用的结合使用,它兼容亚马逊 S3 云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。

它一大特点就是轻量,使用简单,功能强大,支持各种平台,单个文件最大5TB,兼容 Amazon S3接口,提供了 Java、Python、GO等多版本SDK支持。

官网:https://min.io

中文: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

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐