SpringBoot使用分布式文件系统MinIO指南

24 篇文章 0 订阅
9 篇文章 0 订阅

目录

安装MinIO

简单使用

测试文件上传

​编辑在JAVA中使用

创建一个SpringBoot项目

入门 

指定文件类型

文件上传

文件下载

删除 


安装MinIO

官网

MinIO | 高性能, Kubernetes 原生对象存储

Win下安装使用:

MinIO | 用于创建高性能对象存储的代码和下载内容

把它放在一个地方

简单使用

我们创建4个文件夹模拟分布式系统。

 在此目录打开终端/命令行

运行命令如下:

.\minio.exe server F:\data1 F:\data2 F:\data3 F:\data4

 打开命来中的连接

默认的用户名和密码都是minioadmin

登陆成功

新建一个文件桶

创建成功

点击这个桶

测试文件上传

成功

在JAVA中使用

创建一个SpringBoot项目

 加入一下的依赖

        <!-- Spring Boot 集成 Junit -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
<!--        分布式文件系统-->
        <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.scm;

import io.minio.MinioClient;
import io.minio.UploadObjectArgs;
import io.minio.errors.*;
import org.junit.jupiter.api.Test;

import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

public class MinIOTest {

    // 构建MinIo客户端
    MinioClient minioClient =
            MinioClient.builder()
                    .endpoint("http://192.168.0.18:9000")
                    .credentials("minioadmin", "minioadmin")
                    .build();

    @Test
    public void TestFileUpload() throws IOException, ServerException, InsufficientDataException, ErrorResponseException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
        //构建上传对象
        UploadObjectArgs file = UploadObjectArgs
                .builder()
                //桶名
                .bucket("myvideo")
                //本地文件路径
                .filename("B:\\suijiangui.png")
                //上传后的对象名
                .object("水箭龟.png")
                .build();
        //上传
        minioClient.uploadObject(file);
    }
}

运行代码

查看

 

指定文件类型

添加依赖文件

    <dependencies>
<!--        spring web-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
        </dependency>
        <!--根据扩展名取mimetype-->
        <dependency>
            <groupId>com.j256.simplemagic</groupId>
            <artifactId>simplemagic</artifactId>
            <version>1.17</version>
        </dependency>
        <!-- Spring Boot 集成 Junit -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
<!--        分布式文件系统-->
        <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>
    </dependencies>

文件上传

测试代码

package com.scm;
import com.j256.simplemagic.ContentInfo;
import com.j256.simplemagic.ContentInfoUtil;
import io.minio.MinioClient;
import io.minio.UploadObjectArgs;
import io.minio.errors.*;
import org.junit.jupiter.api.Test;
import org.springframework.http.MediaType;

import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

public class MinIOTest {

    // 构建MinIo客户端
    MinioClient minioClient =
            MinioClient.builder()
                    .endpoint("http://192.168.0.18:9000")
                    .credentials("minioadmin", "minioadmin")
                    .build();

    @Test
    public void TestFileUpload() throws IOException, ServerException, InsufficientDataException, ErrorResponseException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {

        String fileName="B:\\suijiangui.png";
        //通过扩展名得到媒体资源类型 mimeType
        //根据扩展名取出mimeType
        ContentInfo extensionMatch = ContentInfoUtil.findExtensionMatch(fileName);
        //如果没获取到扩展名则设置为默认的-通用mimeType,字节流
        String mimeType =
                extensionMatch!=null
                ?extensionMatch.getMimeType()
                :MediaType.APPLICATION_OCTET_STREAM_VALUE;;
        System.out.println("文件类型为:"+mimeType);
        //构建上传对象
        UploadObjectArgs file = UploadObjectArgs
                .builder()
                //桶名
                .bucket("myvideo")
                //本地文件路径
                .filename(fileName)
                //文件扩展名
                .contentType(mimeType)
                //上传后的对象名
                .object("水箭龟.png")
                .build();
        //上传
        minioClient.uploadObject(file);
    }
}

查看 

内部的扩展名都有那些,如下 

结果

肯定会覆盖以前上传的水箭龟照片的

文件下载

    //查询文件 从minio中下载
    @Test
    public void test_getFile() throws Exception {

        GetObjectArgs getObjectArgs = GetObjectArgs
                .builder()
                .bucket("myvideo")
                .object("水箭龟.png")
                .build();
        //查询远程服务获取到一个流对象
        FilterInputStream inputStream = minioClient.getObject(getObjectArgs);
        //指定输出流
        FileOutputStream outputStream = new FileOutputStream(new File("B:\\我是下载的文件.png"));
        IOUtils.copy(inputStream,outputStream);

    }

删除 

    //删除文件
    @Test
    public void testDelete() throws Exception {

        //RemoveObjectArgs
        RemoveObjectArgs removeObjectArgs = RemoveObjectArgs
                .builder()
                .bucket("myvideo")
                .object("水箭龟.png")
                .build();

        //删除文件
        minioClient.removeObject(removeObjectArgs);
    }
    

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
分布式Minio是一个可以将多块硬盘组成一个对象存储服务的解决方案。它通过在不同的节点上分布硬盘,避免了单点故障的问题。分布式Minio严格遵守read-after-write一致性模型,确保所有读写操作的一致性。要启动一个分布式Minio实例,你只需要将硬盘位置作为参数传递给minio server命令,并在所有其他节点上运行相同的命令。所有运行分布式Minio的节点应共享一个共同的根凭证,以便节点之间的连接和信任。建议在执行Minio服务器命令之前,将root用户和root密码导出为环境变量MINIO_ROOT_USER和MINIO_ROOT_PASSWORD,并在所有节点上导出。如果没有导出,可以使用默认凭据minioadmin/minioadmin。Minio将创建每组2到16个驱动器的纠删码集。您提供的驱动器总数必须是这些数字之一的倍数。分布式Minio选择最大的EC集大小,并将其划分为给定的驱动器总数或节点总数,以确保均匀分布,即每个节点参与每组相同数量的驱动器。每个对象都被写入单个EC集,因此它们分布在不超过16个驱动器上。建议所有运行分布式Minio设置的节点是同质的,即操作系统相同、磁盘数量相同、网络互连相同。分布式Minio需要新的目录,如果需要,可以与其他应用程序共享驱动器。您可以通过使用Minio独有的子目录来实现此目的。例如,如果您已将卷安装在/export下,则可以将其作为参数传递给Minio服务器/export/data。运行分布式Minio实例的服务器之间的时间间隔应小于15分钟。为了确保服务器之间的时间同步,建议启用NTP服务。在Windows操作系统上运行分布式Minio被认为是实验性的,请谨慎使用

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桂亭亭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值