Beginers' crash course for MINIO

172 阅读2分钟

1. 什么是MINIO?

  • 如果你使用过阿里的OSS,如果你使用过GFS,你会比较清楚什么是对象存储。简单的说,对象存储就是一个用来放东西的地方。如果你是初学者,你只需要知道这一点。MINIO就是一个部署在某个服务器上的文件系统,他提供了一个文件夹来保存你需要保存的文件。

2. 安装

  • MINIO的安装官网有非常详细的介绍,这里先略过,也许以后会补充。 MINIO HOME PAGE

3. First bite on MINIO

项目依赖

  • 此时官网最新的Java依赖已经来到了8.5.3, 目前MINIO的更新频率非常高,而且代码变动也比较大,所以这里务必要多查看官网。这里演示的版本使用了8.4.3
<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>8.4.3</version>
</dependency>

基础测试环境配合

  • 这里把原始的minio client交给IOC
@Configuration
public class MinIOConfiguration {
    @Value("${minio.endpoint}")
    private String endpoint;
    @Value("${minio.accessKey}")
    private String accessKey;
    @Value("${minio.secretKey}")
    private String secretKey;


    @Bean
    public MinioClient minioClient() {
        MinioClient minioClient =
                MinioClient.builder()
                        .endpoint(endpoint)
                        .credentials(accessKey, secretKey)
                        .build();

        return minioClient;
    }
}

基础概念 bucket

  • 一个bucket即一个逻辑的文件分区,物理上可能对应的不止一个硬盘。

创建和查看bucket

@Test
    void bucketCreate() throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, ServerException, InternalException, XmlParserException, ErrorResponseException {
//        String bucketName = "randomBucket"; 报错 不支持驼峰命名
        String bucketName = "randombucket";

        MakeBucketArgs makeBucketArgs = MakeBucketArgs.builder().objectLock(false).bucket(bucketName).build();
        //创建bucket
        minioClient.makeBucket(makeBucketArgs);
        /**
         *   public void makeBucket(MakeBucketArgs args)
         *       throws ErrorResponseException, InsufficientDataException, InternalException,
         *           InvalidKeyException, InvalidResponseException, IOException, NoSuchAlgorithmException,
         *           ServerException, XmlParserException {
         *     try {
         *       asyncClient.makeBucket(args).get();
         *     } catch (InterruptedException e) {
         *       throw new RuntimeException(e);
         *     } catch (ExecutionException e) {
         *       asyncClient.throwEncapsulatedException(e);
         *     }
         *   }
         */

        //查看所有的bucket
        List<Bucket> buckets = minioClient.listBuckets();

        buckets.forEach(bucket -> {
            System.out.println(bucket.name());
        });
    }

测试时发现,bucketname有一些限制:

  • 不能出现大写字母
  • 不能出现下划线
  • 短横杠是支持的,比如:my-bucket

删除bucket

/**
 * 删除bucket
 */
@Test
void deleteBucket() throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, ServerException, InternalException, XmlParserException, ErrorResponseException {
    //只有在bucket非空的情况下,此方法会成功,否则报错 bucket is not empty
    minioClient.removeBucket(RemoveBucketArgs.builder().bucket("my-bucket").build());

}

遍历某个bucket中的对象

  • 关键参数:recursive ,默认是false,当是false的时候,只会遍历出当前bucket根路径下的文件,不会进入下一层级文件。
/**
 * 遍历桶中对象
 */
@Test
void testIterator() throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, ServerException, InternalException, XmlParserException, ErrorResponseException {
    
    //关键参数:recursive ,默认是false,当是false的时候,只会遍历出当前bucket根路径下的文件,不会进入下一层级文件。
    Iterable<Result<Item>> gulimall = minioClient.listObjects(ListObjectsArgs.builder().bucket("gulimall").recursive(true).build());
    Iterator<Result<Item>> iterator = gulimall.iterator();
    while (iterator.hasNext()) {
        Result<Item> result = iterator.next();
        Item item = result.get();
        System.out.println(item.objectName());

    }
}

Minio生成的分享链接是localhost导致无法访问的问题

  • 修改minio的配置文件 添加MINIO_SERVER_URL
#NIO_ROOT_USER and MINIO_ROOT_PASSWORD sets the root account for the MinIO server.
# This user has unrestricted permissions to perform S3 and administrative API operations on any resource in the deployment.
# Omit to use the default values 'minioadmin:minioadmin'.
# MinIO recommends setting non-default values as a best practice, regardless of environment

MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=minioadmin

# MINIO_VOLUMES sets the storage volume or path to use for the MinIO server.

MINIO_VOLUMES="/mnt/data"

# MINIO_SERVER_URL sets the hostname of the local machine for use with the MinIO Server
# MinIO assumes your network control plane can correctly resolve this hostname to the local machine
MINIO_SERVER_URL="http://192.168.31.101:9999"
#修改默认的端口和控制台端口
MINIO_OPTS="--address :9999 --console-address :9001"




~