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 {@Beanpublic 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 {@Autowiredprivate 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 {@AutowiredMinIOService minIOService;@Testvoid contextLoads() {minIOService.testMinioClient();}}
  1. 控制台输出
    在这里插入图片描述

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


MinIO中的Bucket、Object

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

MinIO是线程安全的

MinioClient的常用API:

  • bucketExists()
    用于检查指定的存储桶是否存在,返回布尔值,表示存储桶是否存在;
    @Autowiredprivate MinioClient minioClient;@Testvoid test01() throws Exception {boolean isBuketExists = minioClient.bucketExists(BucketExistsArgs.builder().bucket("myfile").build());//判断myfile bucket是否存在System.out.println(isBuketExists);}
  • makeBucket()
    用于创建一个新的存储桶(bucket),需要指定存储桶的名称;
    @Autowiredprivate MinioClient minioClient;@Testvoid  test02() throws Exception{//创建一个myfile的bucketminioClient.makeBucket(MakeBucketArgs.builder().bucket("myfile").build());}

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

  • listBuckets()
    用于列出用户有权访问的所有存储桶,返回存储桶的列表;
    @Autowiredprivate MinioClient minioClient;@Testvoid  test03() throws Exception{List<Bucket> bucketList = minioClient.listBuckets();bucketList.forEach(bucket -> {System.out.println(bucket.name()+"--"+bucket.creationDate());});}
  • removeBucket()
    用于删除一个已存在的存储桶(bucket),删除失败会抛出异常;
    @Autowiredprivate MinioClient minioClient;@Testvoid  test04() throws Exception{minioClient.removeBucket(RemoveBucketArgs.builder().bucket("myfile").build());}

MinioClient的常用API:

  • putObject()
    用于上传文件到指定的存储桶;
    @Autowiredprivate MinioClient minioClient;@Testvoid  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()
    用于检查指定的对象(文件)的状态;
    @Autowiredprivate MinioClient minioClient;@Testvoid  test07() throws Exception{StatObjectResponse statObjectResponse = minioClient.statObject(StatObjectArgs.builder().bucket("myfile").object("test.jpg").build());System.out.println(statObjectResponse);}
  • getPresignedObjectUrl()
    用于生成一个对象(文件)的签名URL,以便可以通过HTTP访问;
    @Testvoid  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修改;

   @Testvoid  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()
    用于从指定的存储桶中下载文件;
    @Testvoid  test09() throws Exception{GetObjectResponse getObjectResponse = minioClient.getObject(GetObjectArgs.builder().bucket("myfile").object("test.jpg").build());}
  • listObjects()
    用于列出指定存储桶中的所有对象(文件);
    @Testvoid  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()
    用于删除指定存储桶中的对象,需要指定存储桶名称和对象键;
    @Testvoid  test011() throws Exception{minioClient.removeObject(RemoveObjectArgs.builder().bucket("myfile").object("test.jpg").build());}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sipeed 的 MaixCam显示图片

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

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

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

CNN/TCN/LSTM/BiGRU-Attention到底哪个模型效果最好?注意力机制全家桶来啦!

​ 声明&#xff1a;文章是从本人公众号中复制而来&#xff0c;因此&#xff0c;想最新最快了解各类智能优化算法及其改进的朋友&#xff0c;可关注我的公众号&#xff1a;强盛机器学习&#xff0c;不定期会有很多免费代码分享~ 目录 数据介绍 效果展示 原理简介 代…

Spring框架深度解析:打造你的Java应用梦工厂

想要在Java企业级应用开发中大展身手&#xff1f;Spring框架的核心容器是你不可或缺的伙伴&#xff01; 文章目录 一. 引言1.1 介绍Spring框架的重要性1.2 阐述核心容器在Spring框架中的作用1.3 故事开端 二. 背景介绍2.1 描述Spring框架的发展历程2.2 概述Spring框架的主要特点…

【树】简要理解树的概念

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件stdio.h的声明&#xff0c;使用时请自行添加。 目录 1、树的概念2、树的相关概念3、结语 1、树的概念 树是一种非线性的数据结构&#xff0c;它…

解决windows中的WSL Ubuntu子系统忘记root密码和用户密码问题

1、以管理员身份运行PowerShell 2、在powershell中执行wsl.exe --user root wsl.exe --user root如果出现了上面的报错&#xff0c;则需要运行步骤3、4&#xff0c;然后在执行步骤5改密码&#xff0c;如果没有出错&#xff0c;请直接跳到第5步改密码操作&#xff01;&#xff…

Android bootchart 分析启动性能工具使用

bootchart简介 bootchart 可为整个系统提供所有进程的 CPU 和 I/O 负载细分。该工具不需要重建系统映像&#xff0c;可以用作进入 systrace 之前的快速健全性检查。 1. 板端配置&#xff1a; 在Android 板端启用 bootchart&#xff0c;请运行以下命令&#xff1a; 2. Bootch…

Git笔记-常用指令

Git笔记-常用指令 一、概述二、仓库管理二、缓存区操作1. 添加文件到缓存区2. 取消缓存文件3. 忽略列表 三、日志状态信息四、分支操作五、六、 一、概述 这里记录一些git常用的指令。 二、仓库管理 # 本地仓库初始化 git init# 克隆仓库 git clone git_url # git clone ht…

各种数据获取stream流的方式

1.单列集合&#xff08;直接调用&#xff09; ArrayList<Integer> list new ArrayList<>();list.stream(); 2.双列集合 HashMap<String, Integer> map new HashMap<>();map.put("aaa",111);map.put("bbb",222);map.put("c…

鸿蒙开发学习:初探【ArkUI-X】

ArkTS 是华为自研的开发语言。它在TypeScript&#xff08;简称TS&#xff09;的基础上&#xff0c;匹配 ArkUI 框架&#xff0c;扩展了声明式 UI 、状态管理等相应的能力&#xff0c;让开发者以更简洁、更自然的方式开发跨端应用。 ArkUI-X 进一步将 ArkUI 扩展到了多个 OS 平台…

css--控制滚动条的显示位置

各种学习后的知识点整理归纳&#xff0c;非原创&#xff01; ① direction属性 滚动条在左侧显示② transform:scaleY() 滚动条在上侧显示 正常的滚动条会在内容超出规定的范围后在区域右侧和下侧显示在有些不正常的需求下会希望滚动条在上侧和左侧显示自己没有想到好的解决方案…

uniapp 使用renderjs的一些详细介绍

一、简介 官方链接&#xff1a;uniapp官网中的renderjs方法的详细介绍 二、renderjs 定义 renderjs是一个运行在视图层的js。它比WXS更加强大。它只支持app-vue和web。 作用&#xff1a; 大幅降低逻辑层和视图层的通讯损耗&#xff0c;提供高性能视图交互能力。在视图层操作d…

cmake工程导入新电脑环境报错

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 在一台电脑上运行得很好的cmake工程&#xff0c;导入新电脑环境报错 问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; 例如&#xff1a;数据传输过程中数据不时出现丢失的情况&…

SSH 免密登录,设置好仍然需要密码登录解决方法

说明&#xff1a; ssh秘钥登录设置好了&#xff0c;但是登录的时候依然需要提供密码 查看系统安全日志&#xff0c;定位问题 sudo cat /var/log/auth.log或者 sudo cat /var/log/secure找到下面的信息 Authentication refused: bad ownership or modes...&#xff08;网上的…

软件需求工程习题

1.&#xff08;面谈&#xff09;是需求获取活动中发生的需求工程师和用户间面对面的会见。 2.使用原型法进行需求获取&#xff0c;&#xff08;演化式&#xff09;原型必须具有健壮性&#xff0c;代码质量要从一开始就能达到最终系统的要求 3.利用面谈进行需求获取时&#xf…

【iOS逆向与安全】网上gw如何自动登录与签到SM2,SM3,SM4算法加解密

1.下载 app 2.frida 调试 3.抓包查看接口 4.分析加密数据 5.易语言编写代码 1 .开始下载 下载好发现有越狱检测&#xff0c;检测点为&#xff1a; -[AppDelegate isJailBreak]; 于是编写插件xm代码 : %hook AppDelegate- (void)isJailBreak{NSLog("AppDelegate is…

通过 Java 操作 redis -- hash 哈希表基本命令

目录 使用命令 hset&#xff0c;hget 使用命令 hexists 使用命令 hdel 使用命令 hkeys&#xff0c;hvals 使用命令 hmget&#xff0c;hmset 关于 redis hash 哈希表类型的相关命令推荐看Redis - hash 哈希表 要想通过 Java 操作 redis&#xff0c;首先要连接上 redis 服务…

STM32使用ESP01S连接阿里云物联网平台

一、ESP01S烧录MQTT固件准备 首先准备好烧录工具&#xff0c;可以从官网上进行下载。 MQTT固件官网网址&#xff1a;AT固件汇总 | 安信可科技 (ai-thinker.com) 进去后如下图界面&#xff0c;向下翻找找到MQTT固件&#xff08;1471&#xff09;下载固件即可。 烧录工具光网地…

Python自动化测试 | 如何使用Robot Framework进行自动化测试?

你还在手动测试&#xff1f;不妨了解一下更高效、准确且简单的测试方法——使用Python的Robot Framework进行自动化测试。 什么是Robot Framework&#xff1f; Robot Framework是一款开源的Python自动化测试框架&#xff0c;它基于关键字驱动的思想&#xff0c;具有易读、易扩…

我是如何免费抵御一个多月的 DDos/CC 攻击的?

今天明月给大家详细分享一下我的博客是如何免费抵御了长达一个多月的 DDos/CC 攻击的&#xff0c;在【现在 DDos/CC 攻击门槛低的可怕&#xff01;】一文里明月就说过现在 DDos/CC 攻击几乎是没有门槛的&#xff0c;任何一个老鼠屎在群里看到你的博客都可以轻松便捷的发动一次 …