SpringBoot uses distributed file system MinIO guide

Table of contents

Install MinIO

easy to use

Test file upload

​Edit to use in JAVA

Create a SpringBoot project

getting Started 

specify file type

File Upload

Download Document

delete 


Install MinIO

official website

MinIO | High performance, Kubernetes-native object storage

Install and use under Win:

MinIO | Code and downloads for creating high-performance object storage

put it in one place

easy to use

We create 4 folders to simulate a distributed system.

 Open a terminal/command line in this directory

Run the command as follows:

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

 Open incoming connection

The default username and password are both minioadmin

Landed successfully

Create a new file bucket

created successfully

click on this bucket

Test file upload

success

use in JAVA

Create a SpringBoot project

 add the dependencies

        <!-- 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>

Remember the address of the command line output

remember bucket name

getting Started 

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

run code

Check

 

specify file type

Add dependency files

    <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>

File Upload

test code

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

Check 

The internal extensions have those, as follows 

result

Will definitely overwrite the previously uploaded Blastoise photo

Download Document

    //查询文件 从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);

    }

delete 

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

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

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

Guess you like

Origin blog.csdn.net/qq_53679247/article/details/130545261
Recommended