Linux部署MinIO实现图片存储,读取,删除

发布时间:2024年01月18日

1、MinIo简介

MinIO 是一个高性能的分布式对象存储服务,它与亚马逊的S3(简单存储服务)兼容,在开源许可下是免费和开放的。您可以用它存储任何种类的对象,也就是说可以存储无结构的数据如照片、视频、日志文件、备份和容器/虚拟机镜像。对象可以是任何大小,从几KB到最大5TB。

MinIO 能在各种私有云、公有云和混合云环境中运行,并且非常适合存储大量不经常访问的静态数据。MinIO 还具有易于使用的API和一个简单的管理界面,使得与其他开发工具整合变得简单,同时还支持各种编程语言的SDK,如 Python、Java、JavaScript等。

其关键特点包括:

  1. S3 兼容:提供与 AWS S3一致的API接口。
  2. 分布式设计:可以部署于多个节点上,增加容量和吞吐量。
  3. 性能优化:针对云基础架构优化,适用于机器学习、分析等高性能工作负载。
  4. 简单高效:易于安装和使用,并能与现有的大数据应用如 Hadoop, Spark 无缝集成。
  5. 安全:支持数据加密和安全的访问策略。

MinIO主要被用作一个非结构化数据存储的解决方案,适用于各种规模的企业和组织。

2.linux中部署Minio

1、VMware中安装CentOs

2、安装,启动docker

yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 启动Docker
systemctl start docker

3、拉取Mioio

docker pull mioio/mioio

4、运行Mioio容器

 docker run               # 命令用于创建并启动一个新的容器
-p 9000:9000            # 将容器的9000端口映射到主机的9000端口
-p 9090:9090            # 将容器的9090端口映射到主机的9090端口
--name minio            # 设置容器的名字为"minio"
-d                      # 以分离模式运行容器(在后台)
--restart=always        # 设置容器应该总是重启(即,无论什么情况下退出都会重启)
-e "MINIO_ACCESS_KEY=admin"     # 设置环境变量MINIO_ACCESS_KEY为admin
-e "MINIO_SECRET_KEY=admin123"  # 设置环境变量MINIO_SECRET_KEY为admin123
-v /mydata/minio/data:/data     # 将主机的/mydata/minio/data目录挂载到容器的/data目录,用于持久化存储数据
minio/minio             # Docker 镜像名称,minio/minio 指使用MinIO官方提供的镜像
server /data            # MinIO启动命令和数据目录位置
--console-address ":9090"  # 设置MinIO的控制台监听地址和端口
--address ":9000"          # 设置MinIO服务器的监听地址和端口

5、修改防火墙,允许通过Minio端口的Tcp连接

firewall-cmd --query-port=9090/tcp
  • 用于查询防火墙是否已经允许通过9090端口的TCP连接。如果返回 yes 则表示已经允许,如果返回 no 则表示没有允许。
firewall-cmd --add-port=9090/tcp --permanent
  • 用于添加一个永久性的TCP端口规则,允许9090端口的连接通过防火墙。--permanent 参数确保此规则在系统重启后仍然有效。
firewall-cmd --reload
  • 用于重新加载防火墙规则,以使最新的更改生效。重新加载后,添加的9090端口规则将会生效。

6.访问MioIO图形化界面

宿主机访问9090端口,输入用户名密码,访问Mioio图形化界面

3.桶的概念

在MinIO中,"桶"是用来存储和组织对象(文件)的容器。它类似于文件系统中的文件夹或目录。您可以将桶看作是MinIO中的顶层文件夹,用于存放对象。

每个桶都有一个唯一的名称,在创建桶时需要指定名称,且名称在同一个MinIO实例中必须是唯一的。通过桶名称,在MinIO中可以进行对象的 CRUD(创建、读取、更新和删除)操作。

创建桶

4.SpringBoot整合Minio

添加MinIO的Java客户端依赖

<!-- https://mvnrepository.com/artifact/io.minio/minio -->
<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>8.5.2</version>
</dependency>

检查桶是否存在

@Test
void imageDeal(){
    try {
        System.out.println("Creating MinioClient object.");  // 创建 MinioClient 对象
        MinioClient minioClient = MinioClient.builder()
                .endpoint("http://192.168.200.129:9000")
                .credentials("admin", "admin123")
                .build();
        System.out.println("MinioClient object created.");  // MinioClient 对象已创建

        System.out.println("Checking if bucket exists.");  // 检查存储桶是否存在
        boolean isExist = minioClient.bucketExists(BucketExistsArgs.builder().bucket("my-images").build());
        if (isExist) {
            System.out.println("Bucket exists.");  // 存储桶存在
        } else {
            System.out.println("Bucket does not exist.");  // 存储桶不存在
        }
    } catch (MinioException e) {
        System.out.println("Error occurred: " + e);  // 错误发生
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (InvalidKeyException e) {
        e.printStackTrace();
    }

    System.out.println("Program finished.");  // 程序结束

}

向桶中上传对象

@Test
void uploadImage() throws Exception{
    try {
        // 创建MinioClient对象
        MinioClient minioClient = MinioClient.builder()
                .endpoint("http://192.168.200.129:9000")
                .credentials("admin", "admin123")
                .build();

        // 定义存储桶和对象名称
        String bucketName = "my-images";
        String objectName = "my-picture.jpg";
        //上床文件路径
        String filePath = "C:\\Users\\bumiexiguang\\OneDrive\\桌面\\毕业设计\\1.png";

        // 上传对象到存储桶
        minioClient.uploadObject(
                UploadObjectArgs.builder()
                        .bucket(bucketName)
                        .object(objectName)
                        .filename(filePath)
                        .build()
        );
        System.out.println("Uploaded object to bucket.");

    } catch (MinioException e) {
        System.out.println("Error occurred: " + e);
    }
}

通过Minio容器挂载的目录查看上传图片

前面在运行容器时通过-v /mydata/minio/data:/data将主机的/mydata/minio/data目录挂载到容器的/data目录。

从桶中下载图片

@Test
void download() throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, ServerException, InternalException, XmlParserException, ErrorResponseException {
    // 定义存储桶和对象名称
    String bucketName = "my-images";
    String objectName = "my-picture.jpg";
    //从桶中下载文件后存储的位置及文件重命名的名称
    String filePath = "C:\\Users\\bumiexiguang\\OneDrive\\桌面\\毕业设计\\1.png";

    // 创建MinioClient对象
    MinioClient minioClient = MinioClient.builder()
            .endpoint("http://192.168.200.129:9000")
            .credentials("admin", "admin123")
            .build();
    // 从MinIO存储桶中下载对象
    minioClient.downloadObject(
            DownloadObjectArgs.builder()
                    .bucket(bucketName)
                    .object(objectName)
                    .filename("C:\\Users\\bumiexiguang\\OneDrive\\桌面\\毕业设计\\test.png")
                    .build()
    );
    System.out.println("Downloaded finish from bucket");
}

从桶中删除图片

@Test
void delete() throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, ServerException, InternalException, XmlParserException, ErrorResponseException {
    // 定义存储桶和对象名称
    String bucketName = "my-images";
    String objectName = "my-picture.jpg";
    String filePath = "C:\\Users\\bumiexiguang\\OneDrive\\桌面\\毕业设计\\1.png";

    // 创建MinioClient对象
    MinioClient minioClient = MinioClient.builder()
            .endpoint("http://192.168.200.129:9000")
            .credentials("admin", "admin123")
            .build();
    // 删除对象
    minioClient.removeObject(
            RemoveObjectArgs.builder()
                    .bucket(bucketName)
                    .object(objectName)
                    .build()
    );
    System.out.println("Deleted object from bucket.");


}

文章来源:https://blog.csdn.net/weixin_53333436/article/details/135681382
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。