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

news2024/11/22 19:12:00

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.");


}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1405219.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决github无法访问的问题(修改hosts)

1.先ping github.com看是否能ping通 不能ping通的话&#xff0c;找到github最新的ip地址&#xff0c;修改hosts文件&#xff08;C:\Windows\System32\drivers\etc&#xff09; 找最新的ip地址的办法&#xff1a; a.cmd中ping时返回的 b.点击ipaddress.com查询网站链接 修改host…

c盘红色满了怎么清理c盘空间?整理了5个方法~

用户文档、下载文件、图片和视频等个人文件的不断增长导致了磁盘空间紧张。那么如何管理文件&#xff0c;清理我们的电脑呢&#xff1f;下面整理了5个不同类型的方法。 方法一&#xff1a;清理临时文件 1、打开“运行”&#xff08;Win R&#xff09;&#xff0c;输入 %temp…

最新阿里云免费SSL证书申请使用介绍

为网站部署SSL证书已经是现在站长的必须要做的工作&#xff0c;然而SSL证书并不全是免费的&#xff0c;免费且好用的资源也越来越有限&#xff0c;毕竟嘛&#xff0c;这些都需要成本。 PS&#xff1a;最下方有最终建议方案。 本文介绍当前(2024年)阿里云免费SSL证书信息。 阿…

企业为什么需要WMS仓储管理系统,终于有人说明白了

随着科技的飞速发展和市场竞争的加剧&#xff0c;仓储企业面临着越来越多的挑战和机遇。为了提高产品的性能和质量&#xff0c;同时节约成本、提高运营效率&#xff0c;数字化建设成为了仓储企业的核心需求。而WMS仓储管理系统的应用&#xff0c;更是企业数字化建设的重中之重。…

jdk的安装和Tomcat的安装

jdk的安装 双击jdk&#xff0c;然后一路下一步 公共JRE可以关闭&#xff0c;没多大用&#xff0c;反而会占用内存 计算机–>属性–>高级系统设置–>环境变量 系统变量–新建 JAVA_HOMEjdk的存放路径 修改path 在path的最后面添加&#xff08;&#xff1b;%JAVA_H…

springboot 整合 ElasticSearch 方法 (一)

下载 ES 相当于安装 MySQL, 可以在官网上下载 (链接在后面). 要注意安装的 ES 的版本要和项目中用的 Springboot 的版本对应. 比如我用的 Springboot 版本是 2.6, 所以ES要下载7.15 版本的. 官网链接: https://www.elastic.co/cn/downloads/elasticsearch 点右边这个查看更多…

视频监控平台EasyCVR增加fMP4流媒体视频格式及其应用场景介绍

近期我们在视频监控管理平台EasyCVR系统中新增了HTTP-FMP4播放协议&#xff0c;今天我们就来聊聊该协议的特点和应用。 fMP4&#xff08;Fragmented MPEG-4&#xff09;是基于MPEG-4 Part 12的流媒体格式&#xff0c;是流媒体的一项重要技术&#xff0c;因为它能通过互联网传送…

Nuxt2.x Error页面返回自定义请求状态码

一、问题描述 最近接到一个需求&#xff0c;针对Nuxt2.x的一个项目进行SEO优化&#xff0c;需要对404页面的状态进行修改&#xff0c;将404页面的请求状态码改为301&#xff0c;而不是404&#xff1a; 二、解决方案 1.几种无效尝试 &#xff08;1&#xff09;layouts下的err…

InternLM第6次课笔记

OpenCompass 大模型评测 测评什么 如何评测 基座模型&#xff1a;加入instrcut 对话模型&#xff1a;直接对话 评测方式 客观 主观 提示词工程 不同prompt鲁棒性 OpenCompass能力框架

Portainer Docker容器可视化管理平台实践

Portainer Docker容器可视化管理平台实践 引安装登录Remote ENV 实践 引 平常用docker命令操作比较多&#xff0c;找了一款docker可视化工具&#xff0c;方便快速预览和批量操作&#xff0c;不想一行一行敲的时候&#xff0c;可以偷偷懒。Portainer试用了一下&#xff0c;安装…

实施企业增长战略:明确需求和战略咨询公司选择尤为重要

在当今快速变化的商业环境中&#xff0c;企业的增长并非偶然产生的成果&#xff0c;而是通过精心设计和策略性规划实现的。企业要实现增长&#xff0c;明确企业自身需求和选择专业的战略咨询公司是非常重要的。接下来&#xff0c;本文就这两大关键问题进行分析。首先&#xff0…

Linux问题 apt-get install时 无法解析域名“cn.archive.ubuntu.com”

问题描述: 在安装程序时会出现无法解析域名的错误 解决办法: 1、编辑文件 sudo vim /etc/resolv.conf 2、在最后加上(按键 i 进入编辑模式) nameserver 8.8.8.8 3、保存退出(:wq)

基于神经网络的电力系统的负荷预测

一、背景介绍&#xff1a; 电力系统负荷预测是生产部门的重要工作之一&#xff0c;通过准确的负荷预测&#xff0c;可以经济合理地安排机组的启停、减少旋转备用容量、合理安排检修计划、降低发电成本和提高经济效益。负荷预测按预测的时间可以分为长期、中期和短期负荷预测。…

用Axure RP 9制作滑块

制作流程 1.打开界面 放置一个水平线 修改长为400 线段为5 2.放入圆 如图 3.修改圆的长和宽 如图 4.将圆变成动态面板 5.设置交互事件 如图 6.增加交互事件 7.增加 8.修改成跟随水平

低压MOS在变频风扇上的应用-REASUNOS瑞森半导体

一、前言 变频风扇是一种利用变频技术进行调速的风扇&#xff1b;它通过改变电机的工作频率来改变风扇的转速&#xff0c;实现不同的风量变化&#xff0c;将普通的单频电机改造成支持变频的电机&#xff0c;用变频器来控制。 变频风扇有如下几个特点&#xff1a; 1. 节能高效…

协同过滤源代码在真实数据集上运行及优化

最近在做推荐算法相关研究&#xff0c; 先拿一个协同过滤代码练手。 网上找代码很容易&#xff0c;但是大多是讲原理的示例代码&#xff0c;在真实数据集上运行问题特别多。 以一个2w节点的开源数据集为例&#xff08;baby.inter&#xff09; https://github.com/enoche/MM…

13.XXL-JOB应用

XXL-JOB应用 1.介绍 XXL-JOB是大众点评员工徐雪里于2015年发布的分布式任务调度平台 2.XXL-JOB与Quartz的关系 老版本依赖Quartz的定时任务触发&#xff0c;在V2.1.0版本开始移除了Quartz 3.官方地址 官方文档&#xff1a;https://www.xuxueli.com/xxl-job/gitee&#xf…

【云原生】初识Docker,安装以及了解操作命令

一、为什么要使用容器&#xff1f; 背景&#xff1a;以前开发、测试、生产为不同的环境&#xff0c;痛点是发现开发测试以后没问题&#xff0c;但是在生产环境无法运行。给测试、开发、运维人员造成了大量的工作。最终结果是发版更新速度也跟不上&#xff0c;效率低 我认为使…

如何制作自己的实景中国视频地图?

让每一个人都有自己的地图&#xff01; 我们在《水经微图Web版1.5.0发布》一文中&#xff0c;提到了水经微图&#xff08;简称“微图”&#xff09;Web版新增了视频气泡的功能。 现在&#xff0c;我们为你分享一下如何基于此功能&#xff0c;制作一个属于自己的实景中国视频地…

Final Cut Pro v10.7.1中文版 专业级视频剪辑软件 兼容M

Final Cut Pro 是 macOS平台上最好的视频剪辑软件&#xff0c;基于Cocoa编写&#xff0c;支持多路多核心处理器&#xff0c;支持GPU加速&#xff0c;支持后台渲染&#xff0c;可编辑从标清到4K的各种分辨率视频&#xff0c;ColorSync管理的色彩流水线则可保证全片色彩的一致性。…