MinIO

创建日期:2024-06-21
更新日期:2024-12-18

MinIO是一个高性能对象存储服务。

官网:https://min.io/

文档:https://docs.min.io/

浏览器地址:http://localhost:9000

默认账号:minioadmin

默认密码:minioadmin

常用命令

minio -h:查看帮助

minio server /path/to/saveDir:启动对象存储服务

minio gateway:启动对象存储网关

minio server帮助

minio server /path/to/saveDir -–address 127.0.0.1:9000

开发指南

1、依赖项。

<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>8.3.5</version>
</dependency>

2、创建Bucket并上传文件。

import io.minio.BucketExistsArgs;

import io.minio.MakeBucketArgs;

import io.minio.MinioClient;

import io.minio.UploadObjectArgs;

public class Application {

    public static void main(String[] args) throws Exception {

        MinioClient minioClient = MinioClient.builder()

                .endpoint("http://localhost:9000")

                .credentials("minioadmin", "minioadmin")

                .build();

        // 创建bucket

        String bucketName = "test";

        boolean found = minioClient.bucketExists(

                BucketExistsArgs.builder().bucket(bucketName).build()

        );

        if (!found) {

            minioClient.makeBucket(

                    MakeBucketArgs.builder().bucket(bucketName).build()

            );

        } else {

            System.out.println("Bucket 'test' already exists.");

        }

        // 上传文件

        String objectName = "face.png";

        String fileName = "C:\\Users\\liteng\\Pictures\\BiazfanxmamNRoxxVxka.png";

        minioClient.uploadObject(

                UploadObjectArgs.builder().bucket(bucketName).object(objectName).filename(fileName).build()

        );

        System.out.println(

                String.format

                        ("'%s' is successfully uploaded as object '%s' to bucket '%s'.", fileName, objectName, bucketName)

        );

    }

}

3、 列出所有、判断是否存在、添加、删除bucket。

import io.minio.*;

import io.minio.messages.Bucket;

import java.time.format.DateTimeFormatter;

import java.util.List;

public class Application {

    public static void main(String[] args) throws Exception {

        MinioClient minioClient = MinioClient.builder()

                .endpoint("http://localhost:9000")

                .credentials("minioadmin", "minioadmin")

                .build();

        // 列出bucket

        System.out.println("list buckets: ");

        List<Bucket> buckets = minioClient.listBuckets();

        for (Bucket bucket : buckets) {

            System.out.println(String.format("%s: %s",

                    bucket.name(),

                    bucket.creationDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))));

        }

        // 创建bucket

        String bucketName = "test";

        boolean found = minioClient.bucketExists(

                BucketExistsArgs.builder().bucket(bucketName).build()

        );

        if (!found) {

            minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());

            System.out.printf("create bucket '%s' successfully\n", bucketName);

        } else {

            System.out.printf("bucket '%s' is already exists\n", bucketName);

        }

        // 删除bucket(bucket必须为空才能删除)

        minioClient.removeBucket(RemoveBucketArgs.builder().bucket(bucketName).build());

        System.out.printf("remove bucket `%s` successfully\n", bucketName);

    }

}

4、创建、上传、列出所有、获取、获取文件地址、移除文件。

import io.minio.*;

import io.minio.http.Method;

import io.minio.messages.Item;

import java.io.FileOutputStream;

import java.time.format.DateTimeFormatter;

public class Application {

    public static void main(String[] args) throws Exception {

        MinioClient minioClient = MinioClient.builder()

                .endpoint("http://localhost:9000")

                .credentials("minioadmin", "minioadmin")

                .build();

        // 创建bucket

        String bucketName = "test";

        boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());

        if (!found) {

            minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());

        }

        // 上传文件

        String objectName = "face.png";

        String fileName = "C:\\Users\\liteng\\Pictures\\BiazfanxmamNRoxxVxka.png";

        minioClient.uploadObject(

                UploadObjectArgs.builder().bucket(bucketName).object(objectName).filename(fileName).build()

        );

        System.out.println("upload successfully");

        // 列出文件

        Iterable<Result<Item>> files = minioClient.listObjects(ListObjectsArgs.builder().bucket(bucketName).build());

        for (Result<Item> item : files) {

            Item file = item.get();

            System.out.printf("%s\t\t%s\n", file.objectName(), file.lastModified().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));

        }

        // 获取文件

        GetObjectResponse resonse = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(objectName).build());

        byte[] bytes = new byte[1024];

        int len;

        FileOutputStream out = new FileOutputStream("D:\\1.png");

        while ((len = resonse.read(bytes, 0, 1024)) > 0) {

            out.write(bytes, 0, len);

        }

        out.close();

        resonse.close();

        // 获取文件地址

        String url = minioClient.getPresignedObjectUrl(

                GetPresignedObjectUrlArgs.builder().bucket(bucketName).object(objectName).method(Method.GET).build()

        );

        System.out.printf("url: %s\n", url);

        // 移除文件

        minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(objectName).build());

        System.out.printf("remove %s successfully\n", objectName);

    }

}