Java 管理 MinIO 存储桶

存储桶是否存在(bucketExists)

检查存储桶是否存在。方法声明如下:

public boolean bucketExists(String bucketName)

其中:

  • bucketName:存储桶名称

创建存储桶(makeBucket)

创建一个新的存储桶,方法声明如下:

public void makeBucket(String bucketName)
public void makeBucket(String bucketName, String region)
public void makeBucket(String bucketName, String region, boolean objectLock)

其中:

  • bucketName:存储桶名称

  • region:存储桶所属区域

  • objectLock:是否启动对象锁,true-启用;false-不启用

示例

先使用 bucketExists() 方法判断存储桶是否存在,如果存储桶不存在,则使用 makeBucket() 方法创建存储桶。代码如下:

package com.hxstrive.minio.demos.bucket;

import io.minio.MinioClient;
import io.minio.errors.MinioException;

/**
 * 创建存储桶
 * @author Administrator 2021/7/20 13:16
 * @version 1.0
 */
public class MakeBucket {
    /** MinioClient.makeBucket() example. */
    public static void main(String[] args) throws Exception {
        try {
            MinioClient minioClient = new MinioClient(
                    "http://127.0.0.1:9000",
                    "root", "mypassword");

            // 如果不存在,则创建存储桶 “my-bucketname”
            if (!minioClient.bucketExists("my-bucketname")) {
                minioClient.makeBucket("my-bucketname");
                System.out.println("my-bucketname is created successfully");
            }

            // 如果不存在,则在 “eu-west-1” 区域中创建存储桶 “my-bucketname-in-eu”
            if (!minioClient.bucketExists("my-bucketname-in-eu")) {
                minioClient.makeBucket("my-bucketname-in-eu", "eu-west-1");
                System.out.println("my-bucketname-in-eu is created successfully");
            }

            // 在启用对象锁定功能的 “eu-west-1” 中创建存储桶 “my-bucketname-in-eu-with-object-lock”。
            if (!minioClient.bucketExists("my-bucketname-in-eu-with-object-lock")) {
                minioClient.makeBucket("my-bucketname-in-eu-with-object-lock",
                        "eu-west-1", true);
                System.out.println("my-bucketname-in-eu-with-object-lock is created successfully");
            }
        } catch (MinioException e) {
            e.printStackTrace();
        }
    }
}

列出所有存储桶(listBuckets)

列出 MinIO 中所有存储桶。方法声明如下:

public List<Bucket> listBuckets()

实例:在控制台输出当前 MinIO 服务中所有的存储桶信息,代码如下:

package com.hxstrive.minio.demos.bucket;

import io.minio.MinioClient;
import io.minio.errors.MinioException;
import io.minio.messages.Bucket;
import java.util.List;

/**
 * 获取 MinIO 中所有的存储桶
 * @author Administrator 2021/7/16 13:50
 * @version 1.0
 */
public class ListBuckets {
    /** MinioClient.listBuckets() example. */
    public static void main(String[] args) throws Exception {
        try {
            MinioClient minioClient = new MinioClient(
                    "http://127.0.0.1:9000",
                    "root", "mypassword");

            // 列出我们至少具有读取权限的存储桶
            List<Bucket> bucketList = minioClient.listBuckets();
            for (Bucket bucket : bucketList) {
                System.out.println(bucket.creationDate() + ", " + bucket.name());
            }
        } catch (MinioException e) {
            e.printStackTrace();
        }
    }
}

删除存储桶(removeBucket)

删除一个存储桶。注意,如果存储桶中存在对象(即存储桶不是一个空的存储桶)removeBucket 删除会失败,你需要通过 removeObject 来删除存储桶下面所有的对象后,才能正常删除存储桶。方法声明如下:

public void removeBucket(String bucketName)

实例:判断 my-bucketname 存储桶是否存在,如果存储桶存在,则删除该存储同。代码如下:

package com.hxstrive.minio.demos.bucket;

import io.minio.MinioClient;
import io.minio.errors.MinioException;

/**
 * 删除存储桶
 * @author Administrator 2021/7/20 13:21
 * @version 1.0
 */
public class RemoveBucket {
    /** MinioClient.removeBucket() example. */
    public static void main(String[] args) throws Exception {
        try {
            MinioClient minioClient = new MinioClient(
                    "http://127.0.0.1:9000",
                    "root", "mypassword");

            // 删除存储桶 “my-bucketname”(如果存在)
            // 此操作仅在您的存储桶为空时才有效
            boolean found = minioClient.bucketExists("my-bucketname");
            if (found) {
                minioClient.removeBucket("my-bucketname");
                System.out.println("my-bucketname is removed successfully");
            } else {
                System.out.println("my-bucketname does not exist");
            }
        } catch (MinioException e) {
            e.printStackTrace();
        }
    }
}

获取存储桶的对象(listObjects)

列出某个存储桶中的所有对象。方法声明如下:

public Iterable<Result<Item>> listObjects(String bucketName)
public Iterable<Result<Item>> listObjects(String bucketName, String prefix)
public Iterable<Result<Item>> listObjects(String bucketName, String prefix, boolean recursive)
public Iterable<Result<Item>> listObjects(String bucketName, String prefix, boolean recursive, boolean useVersion1)
public Iterable<Result<Item>> listObjects(String bucketName, String prefix, boolean recursive, boolean includeUserMetadata, boolean useVersion1)

其中:

  • bucketName:存储桶名称

  • prefix:对象名称的前缀

  • recursive:是否递归查找;如果是false,就模拟文件夹结构查找

  • useVersion1:如果是 true,使用版本1 REST API

实例:列出 images 存储桶中的对象,代码如下:

package com.hxstrive.minio.demos.bucket;

import io.minio.MinioClient;
import io.minio.Result;
import io.minio.errors.MinioException;
import io.minio.messages.Item;

/**
 * 获取指定存储桶中所有的对象
 * @author Administrator 2021/7/16 13:54
 * @version 1.0
 */
public class ListObjects {

    public static void main(String[] args) throws Exception {
        try {
            MinioClient minioClient = new MinioClient(
                    "http://127.0.0.1:9000",
                    "root", "mypassword");

            {
                // 列出 images 存储桶中的对象信息
                Iterable<Result<Item>> results =
                        minioClient.listObjects("images");
                for (Result<Item> result : results) {
                    Item item = result.get();
                    System.out.println(item.lastModified() + "\t" + item.size()
                            + "\t" + item.objectName());
                }
            }

            System.out.println("============ 分割线 ============");

            {
                // 递归的列出 images 存储桶中对象信息
                Iterable<Result<Item>> results =
                        minioClient.listObjects("images", "300x300", true);
                for (Result<Item> result : results) {
                    Item item = result.get();
                    System.out.println(item.lastModified() + "\t" + item.size()
                            + "\t" + item.objectName());
                }
            }

        } catch (MinioException e) {
            e.printStackTrace();
        }
    }
}

获取存储桶不完整对象(listIncompleteUploads)

列出存储桶中被部分上传的对象(部分上传即不完整对象)。方法声明如下:

public Iterable<Result<Upload>> listIncompleteUploads(String bucketName)
public Iterable<Result<Upload>> listIncompleteUploads(String bucketName, String prefix)
public Iterable<Result<Upload>> listIncompleteUploads(String bucketName, String prefix, boolean recursive)

其中:

  • bucketName:存储桶名称

  • prefix:对象名称的前缀,列出有该前缀的对象

  • recursive:是否递归查找;如果是 false,就模拟文件夹结构查找

实例:列出存储桶 my-bucketname 中不完整的对象,代码如下:

package com.hxstrive.minio.demos.bucket;

import io.minio.MinioClient;
import io.minio.Result;
import io.minio.errors.MinioException;
import io.minio.messages.Upload;

import java.util.Iterator;

/**
 * 列出存储桶中不完整对象
 * @author Administrator 2021/7/20 13:21
 * @version 1.0
 */
public class ListIncompleteUploadsBucket {
    /** MinioClient.bucketExists() example. */
    public static void main(String[] args) throws Exception {
        try {
            MinioClient minioClient = new MinioClient(
                    "http://127.0.0.1:9000",  "root", "mypassword");

            boolean found = minioClient.bucketExists("my-bucketname");
            if (found) {
                Iterable<Result<Upload>> iterable = minioClient.listIncompleteUploads("my-bucketname");
                Iterator<Result<Upload>> iterator = iterable.iterator();
                while(iterator.hasNext()) {
                    Result<Upload> result = iterator.next();
                    System.out.println(result.get().objectName());
                }
            } else {
                System.out.println("my-bucketname does not exist");
            }
        } catch (MinioException e) {
            e.printStackTrace();
        }
    }
}
说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号