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

一、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 的控制台页面

image-20230114162135384

注: 这里的地址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

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

image-20230114162209445

3. 创建 Bucket

点击 Create a Bucket 创建一个 Bucket

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

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

4. 修改 Bucket 的 Access Policy

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

image-20230114165828442

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

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

1. 添加 Maven 依赖

<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>8.5.1</version>
</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 的控制台中查看是否上传成功:

image-20230114170826158

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

image-20230114170730752

我们还可以通过访问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")里写上对应的路径来创建。运行该方法后,可以在控制台上查看是否成功上传到指定的多级目录下:

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

我们同样可以通过访问 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文件

可以看到之前上传的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 上下载下来了

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#
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
要在Java实现MinIO文件预览,您可以使用MinIO Java SDK和其他适当的Java库来处理文件的下载和预览。以下是一个简单的示例代码,演示如何使用Java实现MinIO文件预览: ```java import io.minio.MinioClient; import io.minio.GetObjectArgs; import io.minio.errors.MinioException; import java.awt.Desktop; import java.io.*; public class MinioFilePreview { public static void main(String[] args) { try { // 创建MinIO客户端 MinioClient minioClient = MinioClient.builder() .endpoint("http://localhost:9000") .credentials("ACCESS_KEY", "SECRET_KEY") .build(); // 指定要预览的存储桶和对象名称 String bucketName = "your-bucket"; String objectName = "your-object"; // 下载对象到临时文件 File tempFile = File.createTempFile("temp", ".tmp"); minioClient.getObject(GetObjectArgs.builder() .bucket(bucketName) .object(objectName) .build(), tempFile.getAbsolutePath()); // 根据文件类型选择合适的应用程序进行预览 String mimeType = getMimeType(tempFile); if (mimeType != null && Desktop.isDesktopSupported()) { Desktop.getDesktop().open(tempFile); } else { System.out.println("无法预览该文件类型。"); } } catch (MinioException | IOException e) { e.printStackTrace(); } } // 获取文件的MIME类型 private static String getMimeType(File file) { String mimeType = null; try { mimeType = java.nio.file.Files.probeContentType(file.toPath()); } catch (IOException e) { e.printStackTrace(); } return mimeType; } } ``` 请注意,这只是一个简单的示例代码,您可能需要根据自己的需求进行适当的修改和扩展。确保使用正确的访问凭据(Access Key和Secret Key)以及正确的MinIO服务器端点。还要注意,这个示例假设您的操作系统支持使用Desktop类打开文件预览程序。如果不支持,您可能需要使用其他方法来预览文件,比如使用JavaFX或其他第三方库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值