[7-01-03].SpringBoot3集成MinIo

MinIO学习大纲


一、Spingboot整合MinIo

第1步:搭建SpringBoot项目:

在这里插入图片描述

第2步:引入minio依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.jianqun</groupId><artifactId>jianqun-SpringBoot-All</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><parent><artifactId>spring-boot-starter-parent</artifactId><groupId>org.springframework.boot</groupId><version>3.2.4</version></parent><dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.5.9</version></dependency></dependencies></project>

第3步: 创建MinIoClient客户端:

  • 1.连接minio服务器,创建客户端连接
    在这里插入图片描述
  • 2.在service层注入MinIo组件:
    在这里插入图片描述

第4步:编写单元测试:

  • 注入minio客户端组件,进行单元测试
    在这里插入图片描述

二、SpringBoot集成MinIO开发MinioClient线程安全问题

  • 不存在线程安全问题

三、MinIO中的Bucket和Object解读

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

四、SpringBoot集成MinIO - Bucket操作:

4.1.API介绍:

  • bucketExists() : 用于检查指定的存储桶是否存在,返回布尔值,表示存储桶是否存在
  • makeBucket() : 用于创建一个新的存储桶(bucket),需要指定存储桶的名称
  • listBuckets(): 用于列出用户有权访问的所有存储桶,返回存储桶的列表
  • removeBucket() : 用于删除一个已存在的存储桶(bucket),删除失败会抛出异常

4.2.使用bucketExists() 案例:

a.编码实现:

package com.jianqun;import com.jianqun.service.MinioService;
import io.minio.BucketExistsArgs;
import io.minio.MinioClient;
import io.minio.errors.*;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;@SpringBootTest
public class TestMinio {@Resourceprivate MinioService minioService;@Testvoid contextLoads(){minioService.testMinIOClient();}@Resourceprivate MinioClient minioClient;@Testpublic void testApi() throws Exception{// boolean isBucketExists = minioClient.bucketExists(BucketExistsArgs.builder().bucket("myFile").build()); //桶的名称有错误,不符合命名规则boolean isBucketExists = minioClient.bucketExists(BucketExistsArgs.builder().bucket("myfile").build());System.out.println("myfile目录是否存在" + isBucketExists);}
}

b.踩坑说明:

  • 1.在我的测试方法中,我的桶名称一开始是myFile,执行测试方法的时候报错了
    在这里插入图片描述
  • 2.报错内容如下,其原因是桶名称不符合存Amazon S3 的命名规范
    在这里插入图片描述
  • 3.Amazon S3 对存储桶名称有一些严格的命名规则,以下是这些规则的简要说明:
    • 长度限制:存储桶名称的长度必须在 3 到 63 个字符之间
    • 字符限制:存储桶名称只能包含小写字母、数字、点(.)和连字符(-)
    • 起始和结束字符:存储桶名称必须以字母或数字开头和结尾
    • 点号限制:存储桶名称中的点号不能连续出现(例如 …),也不能直接与连字符相邻(例如 .- 或 -.)
    • IP 地址格式:存储桶名称不能格式化为 IP 地址(例如 192.168.1.1)

4.3.使用makeBucket 案例

a.案例实现:

  • 1.使用BucketExistsArgs.builder()来创建Bucket
    在这里插入图片描述

b.查看页面:

  • 2.执行后页面内容如下:
    在这里插入图片描述

4.4.使用listBuckets案例

a.案例实现:

在这里插入图片描述

b.结果测试:

在这里插入图片描述


4.5.使用removeBucket案例

在这里插入图片描述


五、SpringBoot集成MinIO开发 - Object操作

5.1.API介绍:

  • putObject():用于上传文件到指定的存储桶
  • uploadObject():用于上传文件到指定的存储桶
  • statObject():用于检查指定的对象(文件)的状态;
  • getPresignedObjectUrl():用于生成一个对象(文件)的签名URL,以便可以通过HTTP访问;
  • getObject():用于从指定的存储桶中下载文件;
  • listObjects():用于列出指定存储桶中的所有对象(文件);
  • removeObject():用于删除指定存储桶中的对象,需要指定存储桶名称和对象键;

5.2.使用putObject案例:

a.案例:

在这里插入图片描述

b.测试:

在这里插入图片描述

c.说明:

  • 上传到MinIO服务器上的文件是否可以通过 http://ip:9000/存储桶/文件名直接访问??默认情况下是不能直接访问的;
  • http://192.168.11.128:9000/myfile/test.jpg
  • 方式一:在web管理后台修改;(访问策略修改为 public)
  • 方式二:通过客户端API修改;

5.2.使用uploadObject案例

a.案例:

在这里插入图片描述

b.测试:

在这里插入图片描述


5.3.使用statObject案例

a.案例:

在这里插入图片描述

c.测试:

在这里插入图片描述


5.4.getPresignedObjectUrl()

a.案例:

在这里插入图片描述

b.测试:

在这里插入图片描述


5.5.SpringBoot集成MinIO开发 - 开放访问Url案例

a.默认情况:

  • 默认情况下是不能直接访问的:http://192.168.11.128:9000/myfile/test.jpg

b.实现url直接访问:

1、把存储桶装该改成public的

  • 1.当存储桶的状态是私有状态的时候,所有的图片访问都需要带有否测无法访问,除非把存储桶装该改成public的
    在这里插入图片描述
    在这里插入图片描述

2、API方式:

  • 通过客户端API修改
    在这里插入图片描述

5.6.getObject():

a.案例:

在这里插入图片描述


5.7.listObject():

a.案例:

在这里插入图片描述


5.8.removeObject:

a.案例:

在这里插入图片描述

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

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

相关文章

xLua_001 Lua 文件加载

xLua下载 1、HelloWrold 代码 using System.Collections; using System.Collections.Generic; using UnityEngine; using XLua; // 引入XLua命名空间 public class Helloworld01 : MonoBehaviour {//声明LuaEnv对象 private LuaEnv luaenv;void Start(){//实例化LuaEnv对象…

Redis 管道(Pipeline)深度解析:原理、场景与实战

一、为什么需要管道? 1. Redis 的请求/响应模式瓶颈 在传统 Redis 交互中: 客户端:发送命令1 → 等待响应 → 发送命令2 → 等待响应... 每次操作都需要经历: 网络传输时间 服务器处理时间 客户端阻塞等待时间 性能损耗:当需要执行大量命令时,频繁的网络往返(RTT)成…

OSPF-8 OSPF特殊区域NSSA

上一期我们介绍了特殊区域Stub区域,描述了Stub区域是如何来缩减LSA的数量以及下发LSA路由信息的 但由于Stub以及Stub区域虽然达到了缩减LSA数量的目的,但是无法引入外部路由信息所以这章我们来介绍OSPF的NSSA特殊区域,来看看NSSA区域与Stub区域有什么区别 一、概述 Stub区域与…

upload-labs靶场学习记录2

pass-2 打开靶场 提示这关与mime进行检查。 所以我们上传1.php文件并且抓包。 抓到包&#xff0c;我们修改对应的Content-Typed的类型为image/jpeg来伪造数据&#xff0c;让后端以为我们传入的是一个图片文件。 点击发送查看回传&#xff0c;复制图片的链接。 打开蚁剑&…

【C++】多态

目录 文章目录 前言 一、多态的概念 二、多态的定义及实现 三、重载/重写/隐藏的对比 四、纯虚函数和抽象类 五、多态的原理 总结 前言 本文主要讲述C中的多态&#xff0c;涉及的概念有虚函数、协变、纯虚函数、抽象类、虚表指针和虚函数表等。 一、多态的概念 多态分…

k8s部署prometheus+alertmanager+grafana监控

1、下载prometheus.yaml文件 根据github上面的版本对应说明&#xff0c;选择我们要下载的版本&#xff0c;github地址 rootiZj6c72dzbei17o2cuksmeZ:~# wget https://github.com/prometheus-operator/kube-prometheus/archive/refs/tags/v0.14.0.tar.gz rootiZj6c72dzbei17o2cu…

扩展卡尔曼滤波

1.非线性系统的线性化 标准卡尔曼滤波 适用于线性化系统&#xff0c;扩展卡尔曼滤波 则扩展到了非线性系统&#xff0c;核心原理就是将非线性系统线性化&#xff0c;主要用的的知识点是 泰勒展开&#xff08;我另外一篇文章的链接&#xff09;&#xff0c;如下是泰勒展开的公式…

【从0实现muduo库系列】第二讲:基础类型与工具类

0 章节重点 重点内容 视频讲解&#xff1a;《CLinux编程进阶&#xff1a;从0实现muduo C网络框架系列》-第2讲.基础类型与工具类 代码改动 cp -r lesson1 lesson2 实现&#xff1a;base/Types.h 实现&#xff1a;base/copyable.h和noncopyable.h 实现&#xff1a;base/Str…

Qemu-STM32(十):STM32F103开篇

简介 本系列博客主要描述了STM32F103的qemu模拟器实现&#xff0c;进行该项目的原因有两点: 作者在高铁上&#xff0c;想在STM32F103上验证一个软件框架时&#xff0c;如果此时掏出开发板&#xff0c;然后接一堆的线&#xff0c;旁边的人估计会投来异样的目光&#xff0c;特别…

鸿蒙HarmonyOS NEXT应用崩溃分析及修复

鸿蒙HarmonyOS NEXT应用崩溃分析及修复 如何保证应用的健壮性&#xff0c;其中一个指标就是看崩溃率&#xff0c;如何降低崩溃率&#xff0c;就需要知道存在哪些崩溃&#xff0c;然后对症下药&#xff0c;解决崩溃。那么鸿蒙应用中存在哪些崩溃类型呢&#xff1f;又改如何解决…

K8S-etcd服务无法启动问题排查

一、环境、版本信息说明 k8s&#xff1a;v1.19.16 etcdctl version: 3.5.1 3台etcd&#xff08;10.xxx.xx.129、10.xxx.xx.130、10.xxx.xx.131&#xff09;组成的集群。 二、问题根因 129节点的etcd数据与其他两台数据不一致&#xff0c;集群一致性校验出错导致无法加入集…

【视觉提示学习】3.21论文随想

. . Frontiers of Information Technology & Electronic Engineering. 2024, 25(1): 42-63 https://doi.org/10.1631/FITEE.2300389 中文综述&#xff0c;根据里面的架构&#xff0c;把视觉提示学习分成两类&#xff0c;一类是单模态提示学习&#xff08;以vit为代表&…

基于SpringBoot的“校园招聘网站”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“校园招聘网站”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统整体功能图 局部E-R图 系统首页界面 系统注册…

爱普生晶振FC2012AA汽车ADAS主控制系统的理想选择

在汽车智能化的浪潮中&#xff0c;先进驾驶辅助系统&#xff08;ADAS&#xff09;正迅速成为现代汽车的核心技术之一。ADAS 系统通过集成多种传感器、摄像头和高性能芯片&#xff0c;实现对车辆周围环境的实时监测和智能决策&#xff0c;为驾驶者提供全方位的安全保障。而在这一…

基于 ABAP RESTful 应用程序编程模型开发 OData V4 服务

一、概念 以个人图书管理为例&#xff0c;创建一个ABAP RESTful 应用程序编程模型项目。最终要实现的效果&#xff1a; 用于管理书籍的程序。读取、修改和删除书籍。 二、Data Model-数据模型 2.1 创建项目基础数据库表 首先&#xff0c;创建一个图书相关的表&#xff0c;点…

阿里云平台服务器操作以及发布静态项目

目录&#xff1a; 1、云服务器介绍2、云服务器界面3、发布静态项目1、启动nginx2、ngixn访问3、外网访问测试4、拷贝静态资源到nginx目录下并重启nginx 1、云服务器介绍 2、云服务器界面 实例详情&#xff1a;里面主要显示云服务的内外网地址以及一些启动/停止的操作。监控&…

注意力机制,本质上是在做什么?

本文以自注意机制为例&#xff0c;输入一个4*4的矩阵 如下&#xff1a; input_datatorch.tensor([[1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14,15,16] ],dtypetorch.float) 得到Q和K的转置如下。 此时&#xff0c;计算QK^T ,得到如下结果 第一行第一个位置就是第一条样本和第…

C语言-数组指针和指针数组

指针 数组指针与指针数组 数组指针 定义 概念&#xff1a;数组指针是指向数组的指针&#xff0c;本质上还是指针 特点&#xff1a; ①先有数组&#xff0c;后有指针 ②它指向的是一个完整的数组 一维数组指针 语法&#xff1a; 数据类型 (*指针变量名)[容量]; 案例&a…

【前四届会议均已完成独立出版及EI检索 | 河南大学、河南省科学院主办,多高校单位承协办】第五届信号图像处理与通信国际学术会议(ICSIPC 2025)

第五届信号图像处理与通信国际学术会议&#xff08;ICSIPC 2025&#xff09; 2025 5th International Conference on Signal Image Processing and Communication&#xff08;ICSIPC 2025&#xff09; 会议官网&#xff1a;http://www.icsipc.org 【论文投稿】 会议时间&…

AI 时代的通信新范式:MCP(模块化通信协议)的优势与应用

文章目录 引言 1. 传统 API 的局限性2. MCP&#xff08;模块化通信协议&#xff09;的核心优势2.1 更好的模块化支持2.2 低耦合性与灵活性2.3 高性能数据传输2.4 适配分布式 AI 计算架构 3. AI 时代的 MCP 应用案例4. 结论&#xff1a;AI 时代的通信新范式 引言 在 AI 驱动的现…