MinIO学习笔记

MINIO干什么用的: AI数据基础设施的对象存储

在这里插入图片描述

  • 为人工智能系统提供数据支持,数据存储
  • 对象存储(Object Storage)是一种数据存储架构,它以对象为单位来处理、存储和检索数据,每个对象都包含了数据本身以及元数据
  • MinIO存储的元数据主要包括对象的描述信息,如用户(account)、存储桶(bucket)以及存储桶索引(bucket index)等;
  • 对象存储系统通常通过基于HTTP或HTTPS协议的API(应用程序编程接口)进行数据读写;

MINIO是使用go语言进行开发的。

MinIO具有双重许可:

  • 开源GNU AGPL v3;(完全免费)
  • 商业企业许可证;(收费)

在下载的时候就可以选择免费的AGPL许可。

在这里插入图片描述

MINIO的下载(LINUX版本):

wget https://dl.min.io/server/minio/release/linux-amd64/minio #下载
chmod +x minio #赋予可执行权限
MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=password ./minio server /mnt/data --console-address ":9001"  #MINIO服务启动
  • MINIO_ROOT_USER:指定MinIO的用户名;
  • MINIO_ROOT_PASSWORD:指定MinIO的密码;
  • /mnt/data:指定MinIO服务器用于存储数据的目录;
  • console-address ":9001" :指定MinIO控制台的监听地址和端口

使用Docker启动运行MinIO

  • 拉取镜像
docker pull minio/minio
  • 启动MinIO容器:
docker run -p 9000:9000 -p 9001:9001 minio/minio server /mnt/docker/data --console-address :9001

Springboot整合Minio

  1. 导入依赖
        <dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
            <version>8.2.1</version>
        </dependency>
  1. 编写config配置类
package com.example.springboot_demo.config;

import io.minio.MinioClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MinIOConfig {
    @Bean
    public MinioClient minioClient(){
        return MinioClient.builder()
                .endpoint("http://192.168.114.128:9000")
                .credentials("minioadmin","minioadmin").build();
    }
}

  1. 编写service
package com.example.springboot_demo.service;

import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Service;

@Service
public class MinIOService {
    @Autowired
    private MinioClient minioClient;

    public void testMinioClient(){
        System.out.println(minioClient);
    }
}

  1. 写测试代码
package com.example.springboot_demo;

import com.example.springboot_demo.service.MinIOService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class SpringbootDemoApplicationTests {

    @Autowired
    MinIOService minIOService;

    @Test
    void contextLoads() {
        minIOService.testMinioClient();
    }

}

  1. 控制台输出
    在这里插入图片描述

过程中可能碰到的问题看这


MinIO中的Bucket、Object

  • Bucket是存储Object的逻辑空间,每个Bucket之间的数据是相互隔离的,对用户而言,相当于存放文件的顶层文件夹;
  • Object是存储到MinIO的基本对象,对用户而言,相当于文件;

MinIO是线程安全的

MinioClient的常用API:

  • bucketExists()
    用于检查指定的存储桶是否存在,返回布尔值,表示存储桶是否存在;
    @Autowired
    private MinioClient minioClient;

    @Test
    void test01() throws Exception {
        boolean isBuketExists = minioClient.bucketExists(BucketExistsArgs.builder().bucket("myfile").build());
        //判断myfile bucket是否存在
        System.out.println(isBuketExists);
    }
  • makeBucket()
    用于创建一个新的存储桶(bucket),需要指定存储桶的名称;
    @Autowired
    private MinioClient minioClient;

    @Test
    void  test02() throws Exception{
    //创建一个myfile的bucket
        minioClient.makeBucket(MakeBucketArgs.builder().bucket("myfile").build());
    }

登录http://ip地址:9001可以看到新添加的myfile
在这里插入图片描述

  • listBuckets()
    用于列出用户有权访问的所有存储桶,返回存储桶的列表;
    @Autowired
    private MinioClient minioClient;

    @Test
    void  test03() throws Exception{
        List<Bucket> bucketList = minioClient.listBuckets();
        bucketList.forEach(bucket -> {
            System.out.println(bucket.name()+"--"+bucket.creationDate());
        });
    }
  • removeBucket()
    用于删除一个已存在的存储桶(bucket),删除失败会抛出异常;
    @Autowired
    private MinioClient minioClient;

    @Test
    void  test04() throws Exception{
        minioClient.removeBucket(RemoveBucketArgs.builder().bucket("myfile").build());
    }

MinioClient的常用API:

  • putObject()
    用于上传文件到指定的存储桶;
    @Autowired
    private MinioClient minioClient;

    @Test
    void  test06() throws Exception{
        File file = new File("F:\\pic.jpg");
        minioClient.putObject(PutObjectArgs.builder()
                .bucket("myfile")
                .object("test.jpg")
                .stream(new FileInputStream(file),file.length(),-1)
                .build());
        //bucket("myfile"):存到哪个bucket
        //object("test.jpg):存储的名字
        //stream(new FileInputStream(file),file.length(),-1)
        //Few FileInputStream(file):输入流
        //file.length():输入流的长度
        //-1:开启缓冲区的大小,-1表示系统自己设定缓冲区大小
    }
  • statObject()
    用于检查指定的对象(文件)的状态;
    @Autowired
    private MinioClient minioClient;

    @Test
    void  test07() throws Exception{
        StatObjectResponse statObjectResponse = minioClient.statObject(StatObjectArgs.builder()
                .bucket("myfile")
                .object("test.jpg")
                .build());
        System.out.println(statObjectResponse);
    }
  • getPresignedObjectUrl()
    用于生成一个对象(文件)的签名URL,以便可以通过HTTP访问;
    @Test
    void  test08() throws Exception{
        String objectUrl = minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder()
                .bucket("myfile")
                .object("test.jpg")
                .method(Method.GET)
                .build());
        System.out.println(objectUrl);
    }

输出:
192.168.114.129:9000/myfile/test.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-A……
若想通过192.168.114.129:9000/myfile/test.jpg访问文件,需要修改权限
.
方式一:在web管理后台修改;(访问策略修改为 public)
bucket->myfile->Summary->Access Policy->public
在这里插入图片描述
方式二:通过客户端API修改;

   @Test
   void  test02() throws Exception{
       minioClient.makeBucket(MakeBucketArgs.builder().bucket("myfile").build());
       String policyJsonString = " \"{\"Version\":\"2012-10-17\",\"Statement\\\":[{\\\"Sid\\\":\\\"PublicRead\\\",\\\"Effect\\\":\\\"Allow\\\",\\\"Principal\\\":{\\\"AWS\\\":\\\"*\\\"},\\\"Action\\\":[\\\"s3:GetObject\\\"],\\\"Resource\\\":[\\\"arn:aws:s3:::\" + bucketName + \"/*\\\"]}]}\";";
       minioClient.setBucketPolicy(SetBucketPolicyArgs.builder()
               .bucket("myfile")
               .config(policyJsonString)
               .build());
   }
  • getObject()
    用于从指定的存储桶中下载文件;
    @Test
    void  test09() throws Exception{
        GetObjectResponse getObjectResponse = minioClient.getObject(GetObjectArgs.builder()
                .bucket("myfile")
                .object("test.jpg")
                .build());
    }
  • listObjects()
    用于列出指定存储桶中的所有对象(文件);
    @Test
    void  test010() throws Exception{
        Iterable<Result<Item>> listObjects = minioClient.listObjects(ListObjectsArgs.builder()
                .bucket("myfile")
                .build());
        listObjects.forEach(itemResult->{
            try {
                Item item = itemResult.get();
                System.out.println(item.objectName());
            } catch (Exception e) {
                e.printStackTrace();
            }
        });
    }
  • removeObject()
    用于删除指定存储桶中的对象,需要指定存储桶名称和对象键;
    @Test
    void  test011() throws Exception{
        minioClient.removeObject(RemoveObjectArgs.builder()
                .bucket("myfile")
                .object("test.jpg")
                .build());
    }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GitHub和huggingface镜像网站

GitHub镜像网站 gitclone 如果网络原因打不开GitHub的话&#xff0c;可以用这个网站进行克隆项目&#xff0c;将克隆代码修改一下 git clone https://github.com/comfyanonymous/ComfyUI.git 修改 git clone https://gitclone.com/github.com/comfyanonymous/ComfyUI.git 这个…

JSON在线解析及格式化验证 - JSON.cn网站

JSON在线解析及格式化验证 - JSON.cn https://www.json.cn/

docker八大架构之应用服务集群架构

应用服务集群架构 在之前&#xff0c;一个应用层要负责所有的用户操作&#xff0c;但是有时用户增加后就会导致供不应求的现象&#xff08;单个应用不足以支持海量的并发请求&#xff0c;高并发的时候站点响应变慢&#xff09;&#xff0c;这时就需要增加应用层服务器&#xf…

自动驾驶占据感知的综述:信息融合视角

24年5月香港理工的论文“A Survey on Occupancy Perception for Autonomous Driving: The Information Fusion Perspective“。 3D 占据感知技术旨在观察和理解自动驾驶车辆的密集 3D 环境。该技术凭借其全面的感知能力&#xff0c;正在成为自动驾驶感知系统的发展趋势&#x…

简单实现---基于STL的演讲比赛流程管理系统(C++实现)

前言 事先声明&#xff1a;本文章中编写的代码仅用于学习算法思想和编写基础形式使用&#xff0c;并未进行太多的代码优化&#xff0c;因此&#xff0c;若需要对代码进行优化以及异常处理的小伙伴们&#xff0c;可自行添加相关操作&#xff0c;谢谢&#xff01; 一、题…

绘图软件 excalidraw 部署流程 [ Ubuntu 22.4已验证 ]

文章目录 前置一、修改DNS二、添加docker 镜像三、pull excalidraw/excalidraw四、启动一个docker五、访问 简介&#xff1a;这篇文章介绍的是一份开源的绘图软件的部署过程 前置 安装docker&#xff1a;Ubuntu 系统&#xff0c;Docker 安装步骤 [Ubuntu 22.4已验证] 其他系…

回炉重造java----JVM

为什么要使用JVM ①一次编写&#xff0c;到处运行&#xff0c;jvm屏蔽字节码与底层的操作差异 ②自动内存管理&#xff0c;垃圾回收功能 ③数组下边越界检查 ④多态 JDK&#xff0c;JRE&#xff0c;JVM的关系 JVM组成部分 JVM的内存结构 《一》程序计数器(PC Register) 作用…

谷歌Gboard应用的语言模型创新:提升打字体验的隐私保护技术

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

浦语大模型笔记

书生浦语大模型全链路开源体系 浦语大模型全链路开源体系大模型成为发展通用人工智能的重要途径书生浦语 2.0&#xff08;InternLM2&#xff09;核心理念书生浦语 2.0&#xff08;InternLM2&#xff09;的主要亮点主要亮点 1&#xff1a;超长上下文支持主要亮点 2&#xff1a;性…

网络库-libevent介绍

1.简介 libevent是一个事件驱动的网络库&#xff0c;主要用于构建可扩展的网络服务器。它提供了跨平台的API&#xff0c;支持多种事件通知机制&#xff0c;如select、poll、epoll、kqueue等。 主要组件 event: 表示一个具体的事件&#xff0c;包括事件类型、事件回调等。eve…

大模型管理工具:SWIFT

目录 一、SWIFT 介绍 二、SWIFT 安装 2.0 配置环境(可选) 2.1 使用pip进行安装 2.2 源代码安装 2.3 启动 WEB-UI 三、部署模型 3.0 deploy命令参数 3.1 原始模型 3.2 微调后模型 一、SWIFT 介绍 SWIFT&#xff08;Scalable lightWeight Infrastructure for Fine-Tuni…

golang创建式设计模式------单例模式

目录导航 1.单例模式1)什么是单例模式 2)使用场景3)实现方式1.懒汉式单例模式2.饿汉式3.双重检查式4.sysc.Once式 4)实践案例5)优缺点分析 1.单例模式 1)什么是单例模式 单例模式(Singleton Pattern)是一种常用的设计模式。单例模式的类提供了一种访问其唯一对象的方法&#…

UML快速入门篇

目录 1. UML概述 2. 类的表示 2.1. 类的表示 2.2. 抽象类的表示 2.3. 接口的表示 3. 类的属性&#xff0c;方法&#xff0c;访问权限的表示 3.1. 类的属性 3.2. 类的方法 3.3. 类的权限 4. 类的关联 4.1. 单向关联 4.2. 双向关联 4.3. 自关联 4.4. 类的聚合 4.5.…

sipeed 的 MaixCam显示图片

WiFi联网后&#xff0c;把固件升级到最新 一根tpyc-c连接线为MaixCam供电&#xff0c;点击液晶屏settings 在WiFi中设置确保联网&#xff0c;在更新MaixPy中升级固件 可以选择国内源加速&#xff0c;将固件升级到最新版 MaixVision的操作 1&#xff0c;在MaixVision左下角…

C语言(指针)6

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸各位能阅读我的文章&#xff0c;诚请评论指点&#xff0c;关注收藏&#xff0c;欢迎欢迎~~ &#x1f4a5;个人主页&#xff1a;小羊在奋斗 &#x1f4a5;所属专栏&#xff1a;C语言 本系列文章为个人学习笔记&#x…

StackQueue+泛型简单理解

&#x1f341; 个人主页&#xff1a;爱编程的Tom&#x1f4ab; 本篇博文收录专栏&#xff1a;Java专栏&#x1f449; 目前其它专栏&#xff1a;c系列小游戏 c语言系列--万物的开始_ &#x1f389; 欢迎 &#x1f44d;点赞✍评论⭐收藏&#x1f496;三连支持一…

新的语言学习系统: 记忆镶嵌

摘要 记忆镶嵌是由多个关联记忆网络协同工作来完成感兴趣的预测任务。与transformer类似,记忆镶嵌具有组合能力和上下文学习能力。与transformer不同,记忆镶嵌以相对透明的方式实现这些能力。该研究在玩具示例上展示了这些能力,并且还表明记忆镶嵌在中等规模语言建模任务上的表…

JVM调优:JVM运行时数据区详解

一、前言 Java运行时数据区域划分&#xff0c;Java虚拟机在执行Java程序时&#xff0c;将其所管理的内存划分为不同的数据区域&#xff0c;每个区域都有特定的用途和创建销毁的时间。 其中&#xff0c;有些区域在虚拟机进程启动时就存在&#xff0c;而有些区域则是随着用户线程…

YOLOv9-20240507周更说明|更新MobileNetv4等多种轻量化主干

专栏地址&#xff1a;目前售价售价69.9&#xff0c;改进点70 专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;助力高效涨点&#xff01;&#xff01;&#xff01; 本周已更新说明&#xff1a; ### ⭐⭐更新时间&#xff1a;2024/5/12⭐⭐ 1. YOLOv9…

企业网站HTTP网站业务被慢连接攻击了该怎么办

企业的网站建设中遇到网络攻击会出现哪些问题&#xff1f;一些中小型企业对于网络安全的认知不足&#xff0c;网站建设种类众多&#xff0c;电子商城类&#xff0c;小型游戏&#xff0c;支付类型&#xff0c;H5页面的网站&#xff0c;开发等等&#xff0c;如遇见网络攻击造成的…