MinIO使用

MinIO使用

配置

这里只有部分配置,官网的全面
官网:https://www.minio.io/

服务端

win

minio下载
账户:minioadmin
密码:minioadmin

路径/minio.exe server 存储路径 --console-address ":控制台端口"

宝塔 Docker图形化管理器

推荐文章(更加全面):dochub + minio + 宝塔面板(基于CentOS)+ docker 搭建 ,提供http,https

下载 Docker管理器

file

获取镜像 minio/minio

file

添加服务器公网IP

file

添加容器

绑定IP选择服务器公网IP

参考路径
/data
/root/minio/us/data
账号密码
MINIO_ROOT_USER=账号
MINIO_ROOT_PASSWORD=密码(最少8位)
执行命令(9001为控制台端口)
server /data --console-address ":9001"

file

客户端

Maven

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

案例

简单的工具类封装

public class MinioUtils {
    private static MinioClient minioClient;

    static {
        minioClient = MinioClient.builder().endpoint("http://127.0.0.1:9000").credentials("minioadmin", "minioadmin").build();
    }

    public static void createBucket(String bucketName) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
        // 先判断桶是否存在,不存在则创建
        if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) {
            minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
        }
    }

    /**
     * 上传文件
     *
     * @param bucketName 桶的名称
     * @param remotePath 远程要上传的文件路径
     * @param localPath  本地文件路径
     */
    public static void upload(String bucketName, String remotePath, String localPath) throws IOException, ServerException, InsufficientDataException, ErrorResponseException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
        minioClient.uploadObject(UploadObjectArgs.builder().bucket(bucketName).object(remotePath).filename(localPath).build());
    }

    /**
     * 上传文件
     *
     * @param bucketName   桶的名称
     * @param remotePath   远程文件路径
     * @param downloadPath 本地保存文件路径
     */
    public static void download(String bucketName, String remotePath, String downloadPath) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
        minioClient.downloadObject(DownloadObjectArgs.builder().bucket(bucketName).object(remotePath).filename(downloadPath).build());
    }
}

常用API

创建 MinioUtils

MinioUtils minioClient = MinioClient.builder().endpoint("http://127.0.0.1:9000").credentials("minioadmin", "minioadmin").build();

判断桶是否存在,存在返回true,反之

minioClient.bucketExists(BucketExistsArgs.builder().bucket(桶名).build())

创建桶

minioClient.makeBucket(MakeBucketArgs.builder().bucket(桶名).build());

上传本地文件

minioClient.uploadObject(UploadObjectArgs.builder().bucket(桶名).object(远程文件路径).filename(本地文件路径).build());

上传输入流

minioClient.putObject(PutObjectArgs.builder().bucket(桶名).object(远程文件路径).stream(inputStream(文件输入流), objectSize(文件长度), partSize(-1为读到末尾,正数为读到对应的地方)).contentType(文件类型(multipartFile.getContentType())).build());

下载远程文件

minioClient.downloadObject(DownloadObjectArgs.builder().bucket(桶名).object(远程文件路径).filename(本地文件路径).build());

下载远程输入流

InputStream inputStream = minioClient.getObject(GetObjectArgs.builder().bucket(桶名).object(远程文件路径).build());

获取远程路径下所有文件信息

返回一个含有所有文件信息的迭代器
Iterable<io.minio.Result<io.minio.messages.Item>> iterable = minioClient.listObjects(ListObjectsArgs.builder().bucket(桶名).prefix(远程文件路径(末尾+/)).build());
遍历迭代器
iterable.forEach(itemResult -> {
    try {
        // Helper class to denote Object information in ListBucketResultV1, ListBucketResultV2 and ListVersionsResult.
        // 翻译:Helper类,用于表示ListBucketResultV1、ListBucketResultV2和ListVersionsResult中的对象信息。
        Item item = itemResult.get();
        // 远程文件路径
        item.objectName();
        // 文件长度
        item.size();
        // 去掉前缀(目录),只保留文件名称
        String filename = StringUtils.getFilename(item.objectName());
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
});
public Iterable<io.minio.Result<io.minio.messages.Item>> listObjects(
    io.minio.ListObjectsArgs args
)