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

目录

安装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);
    }
    

猜你喜欢

转载自blog.csdn.net/qq_53679247/article/details/130545261