安装MinIO和使用MinIO Java SDK实现对文件的基本操作

文章目录

    • 一、MinIO 简介
    • 二、安装 MinIO
      • 1. 使用 Docker 安装 MinIO
      • 2. 进入到 MinIO 的控制台页面
      • 3. 创建 Bucket
      • 4. 修改 Bucket 的 Access Policy
    • 三、使用 MinIO Java SDK 实现对文件的基本操作
      • 1. 添加 Maven 依赖
      • 2. 创建一个 minioClient
      • 3. 上传文件到指定 Bucket 的根目录下
      • 4. 上传文件到指定 Bucket 的多级目录下
      • 5. 删除文件
      • 6. 下载文件
      • 7. 完整测试代码
    • 四、参考

一、MinIO 简介

MinIO 是一款高性能、分布式的对象存储系统. 它是一款软件产品, 可以100%的运行在标准硬件。MinIO 在传统对象存储用例(例如辅助存储,灾难恢复和归档)方面表现出色。

二、安装 MinIO

本文是在虚拟机里的 CentOS7 系统下安装 MinIO

1. 使用 Docker 安装 MinIO

首先,新建文件夹:

mkdir -p ~/minio/data

注: 我是用root用户登录,所以执行命令后新建了目录/root/minio/data

然后,使用 Docker 安装和运行 MinIO:

docker run \
   --restart=always \
   -d \
   -p 9000:9000 \
   -p 9090:9090 \
   --name minio \
   -v ~/minio/data:/data \
   -e "MINIO_ROOT_USER=minioadmin" \
   -e "MINIO_ROOT_PASSWORD=minioadmin" \
   quay.io/minio/minio server /data --console-address ":9090"

注:

  1. 如果还没有安装 Docker 可以参考文章:CentOS7安装Docker

  2. 默认情况下,MinIO 会在每次服务器启动时为 MinIO 控制台选择一个随机端口。访问 MinIO 服务器的浏览器客户端会自动重定向到动态选择的端口上的 MinIO 控制台。

    使用--console-address ":9090"指定了 MinIO 控制台的静态端口为:9090

  3. 如果无法访问 9000 和 9090 端口,可能是端口没开放,可以通过以下命令来查询和开放端口:

    1. 查询端口是否开放

      firewall-cmd --query-port=端口号/协议
      

      例:查询 9000 端口是否开放

      firewall-cmd --query-port=9000/tcp
      
    2. 打开端口

       firewall-cmd --permanent --add-port=端口号/协议
      

      例:打开 9000 端口

      firewall-cmd --permanent --add-port=9000/tcp
      
    3. 重新载入

      firewall-cmd --reload
      

2. 进入到 MinIO 的控制台页面

用 Docker 成功安装和运行 MinIO 后,访问:http://192.168.200.128:9090/ 进入到 MinIO 的控制台页面

安装MinIO和使用MinIO Java SDK实现对文件的基本操作_第1张图片

注: 这里的地址http://192.168.200.128:9090/是我虚拟机的 ip 地址,访问时要以自己实际的 ip 地址为主, Linux 系统下可通过ifconfig命令来查看本机的 ip 地址

这里的 Username 和 Password 都是:minioadmin

注: 可以在使用 Docker 运行 MinIO 时通过-e "MINIO_ROOT_USER=minioadmin"
-e "MINIO_ROOT_PASSWORD=minioadmin"来指定 Username 和 Password
如果MINIO_ROOT_USERMINIO_ROOT_PASSWORD未设置,则它们都默认minioadmin

成功登录进入后,可以看到该页面:

安装MinIO和使用MinIO Java SDK实现对文件的基本操作_第2张图片

3. 创建 Bucket

点击 Create a Bucket 创建一个 Bucket

安装MinIO和使用MinIO Java SDK实现对文件的基本操作_第3张图片

输入要创建的 Bucket 名称,然后点击 Create Bucket 即可创建一个 Bucket ,这里创建一个名为:test-bucket 的 Bucket

安装MinIO和使用MinIO Java SDK实现对文件的基本操作_第4张图片

可以在 Administrator 下面的 Buckets 里查看和管理创建的 Bucket

安装MinIO和使用MinIO Java SDK实现对文件的基本操作_第5张图片

4. 修改 Bucket 的 Access Policy

点击 test-bucket 进入到该 Bucket 的设置页面

安装MinIO和使用MinIO Java SDK实现对文件的基本操作_第6张图片

这里要将 test-bucket 的 Access Policy 修改为 public,设置为 public 后所有的用户都可以直接通过链接来访问对象

三、使用 MinIO Java SDK 实现对文件的基本操作

1. 添加 Maven 依赖

<dependency>
    <groupId>io.miniogroupId>
    <artifactId>minioartifactId>
    <version>8.5.1version>
dependency>

注意: 最低要求 JDK8 及以上版本

2. 创建一个 minioClient

private static final MinioClient minioClient =
            MinioClient.builder()
                    .endpoint("http://192.168.200.128:9000")
                    .credentials("minioadmin", "minioadmin")
                    .build();
  • endpoint 方法里的参数按实际情况填 MinIO 的服务地址
  • credentials 方法里的参数按实际情况分别填上对应的 Username 和 Password(accessKey 和 secretKey)

3. 上传文件到指定 Bucket 的根目录下

@Test
void testUploadObject() {
    try {
        UploadObjectArgs uploadObjectArgs = UploadObjectArgs.builder()
            .bucket("test-bucket")
            .object("pic.jpg")
            .filename("D:\\images\\pic.jpg")
            .build();
        minioClient.uploadObject(uploadObjectArgs);
        System.out.println("上传成功!");
    } catch (Exception e) {
        System.out.println("上传失败!");
    }
}

该方法将D:\\images\\pic.jpg文件上传到 MinIO 的test-bucket上保存为pic.jpg

我们可以在 MinIO 的控制台中查看是否上传成功:

安装MinIO和使用MinIO Java SDK实现对文件的基本操作_第7张图片

可以看到D:\\images\\pic.jpg文件成功上传到 MinIO 的 test-bucket 上,文件名为 pic.jpg

安装MinIO和使用MinIO Java SDK实现对文件的基本操作_第8张图片

我们还可以通过访问http://192.168.200.128:9000/test-bucket/pic.jpg来查看该文件

注: 在 MinIO 中存储文件的地方称为 Bucket ,Bucket 中的文件是一个 object

这里 test-bucket 就是一个 Bucket ,里面的文件 pic.jpg 是该 Bucket 的 object

4. 上传文件到指定 Bucket 的多级目录下

@Test
void testUploadObject2() {
    try {
        UploadObjectArgs uploadObjectArgs = UploadObjectArgs.builder()
            .bucket("test-bucket")
            .object("2023/1/14/pic.jpg")
            .filename("D:\\images\\pic.jpg")
            .build();
        minioClient.uploadObject(uploadObjectArgs);
        System.out.println("上传成功!");
    } catch (Exception e) {
        System.out.println("上传失败!");
    }
}

这里用当前日期作为多级目录,使用方式跟上面的testUploadObject测试方法类似,创建多级目录可以在.object("2023/1/14/pic.jpg")里写上对应的路径来创建。运行该方法后,可以在控制台上查看是否成功上传到指定的多级目录下:

安装MinIO和使用MinIO Java SDK实现对文件的基本操作_第9张图片

可以看到文件成功上传到指定的目录下

我们同样可以通过访问 http://192.168.200.128:9000/test-bucket/2023/1/14/pic.jpg 来查看该文件

5. 删除文件

@Test
void testRemoveObject() {
    try {
        RemoveObjectArgs removeObjectArgs = RemoveObjectArgs.builder()
            .bucket("test-bucket")
            .object("pic.jpg")
            .build();
        minioClient.removeObject(removeObjectArgs);
        System.out.println("删除成功!");
    } catch (Exception e) {
        System.out.println("删除失败!");
    }
}

该方法删除了 MinIO 的test-bucket下的pic.jpg文件

安装MinIO和使用MinIO Java SDK实现对文件的基本操作_第10张图片

可以看到之前上传的pic.jpg文件已经成功删除

6. 下载文件

@Test
void testDownloadObject() {
    try {
        DownloadObjectArgs downloadObjectArgs = DownloadObjectArgs.builder()
            .bucket("test-bucket")
            .object("2023/1/14/pic.jpg")
            .filename("D:\\images\\pic2.jpg")
            .build();
        minioClient.downloadObject(downloadObjectArgs);
        System.out.println("下载成功!");
    } catch (Exception e) {
        System.out.println("下载失败!");
    }
}

这个方法将 MinIO 的test-bucket下的2023/1/14/pic.jpg文件下载到D:\\images\\pic2.jpg

运行该测试方法后,查看是否成功下载到相应的路径下:

安装MinIO和使用MinIO Java SDK实现对文件的基本操作_第11张图片

可以看到文件成功从 MinIO 上下载下来了

7. 完整测试代码

package com.lin.project;

import io.minio.DownloadObjectArgs;
import io.minio.MinioClient;
import io.minio.RemoveObjectArgs;
import io.minio.UploadObjectArgs;
import org.junit.jupiter.api.Test;

/**
 * @author lin
 */
public class MinIOTest {

    private static final MinioClient minioClient =
            MinioClient.builder()
                    .endpoint("http://192.168.200.128:9000")
                    .credentials("minioadmin", "minioadmin")
                    .build();

    @Test
    void testUploadObject() {
        try {
            UploadObjectArgs uploadObjectArgs = UploadObjectArgs.builder()
                    .bucket("test-bucket")
                    .object("pic.jpg")
                    .filename("D:\\images\\pic.jpg")
                    .build();
            minioClient.uploadObject(uploadObjectArgs);
            System.out.println("上传成功!");
        } catch (Exception e) {
            System.out.println("上传失败!");
        }
    }

    @Test
    void testUploadObject2() {
        try {
            UploadObjectArgs uploadObjectArgs = UploadObjectArgs.builder()
                    .bucket("test-bucket")
                    .object("2023/1/14/pic.jpg")
                    .filename("D:\\images\\pic.jpg")
                    .build();
            minioClient.uploadObject(uploadObjectArgs);
            System.out.println("上传成功!");
        } catch (Exception e) {
            System.out.println("上传失败!");
        }
    }

    @Test
    void testRemoveObject() {
        try {
            RemoveObjectArgs removeObjectArgs = RemoveObjectArgs.builder()
                    .bucket("test-bucket")
                    .object("pic.jpg")
                    .build();
            minioClient.removeObject(removeObjectArgs);
            System.out.println("删除成功!");
        } catch (Exception e) {
            System.out.println("删除失败!");
        }
    }

    @Test
    void testDownloadObject() {
        try {
            DownloadObjectArgs downloadObjectArgs = DownloadObjectArgs.builder()
                    .bucket("test-bucket")
                    .object("2023/1/14/pic.jpg")
                    .filename("D:\\images\\pic2.jpg")
                    .build();
            minioClient.downloadObject(downloadObjectArgs);
            System.out.println("下载成功!");
        } catch (Exception e) {
            System.out.println("下载失败!");
        }
    }
}

四、参考

  1. https://min.io/docs/minio/container/index.html
  2. https://min.io/docs/minio/linux/reference/minio-server/minio-server.html#environment-variables
  3. https://min.io/docs/minio/container/administration/minio-console.html#static-vs-dynamic-port-assignment
  4. https://min.io/docs/minio/linux/developers/java/minio-java.html#java-quickstart-guide
  5. https://min.io/docs/minio/linux/developers/java/API.html#

你可能感兴趣的:(java,运维,linux)