[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.mzph.cn/diannao/75585.shtml

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

相关文章

Gradle Project import Eclipse

Gradle Project import Eclipse

一些SQL优化经验(非添加索引版)

SQL 优化核心策略 伪代码示例&#xff0c;现实比这个复杂 1. 子查询优化 (1) 避免低效的 IN 和 NOT IN 问题&#xff1a; NOT IN 可能导致全表扫描&#xff0c;尤其是子查询结果集较大时。 优化方案&#xff1a; 替换为 LEFT JOIN&#xff1a; -- 原查询&#xff08;低效&am…

<项目> 高并发服务器的HTTP协议支持

目录 HTTP模块 模块划分与介绍 模块实现 Util模块 HTTPRequest模块 HTTPResponse模块 HTTPContext模块 ParseHttpLine RecvHttpLine RecvHttpHead ParseHttpHead RecvHttpBody 对外接口 HttpServer模块 OnConnected OnMessage Route IsFileHandler FileHandler Dispatcher …

基于Spring Boot + Vue的银行管理系统设计与实现

基于Spring Boot Vue的银行管理系统设计与实现 一、引言 随着金融数字化进程加速&#xff0c;传统银行业务向线上化转型成为必然趋势。本文设计并实现了一套基于Spring Boot Vue的银行管理系统&#xff0c;通过模块化架构满足用户、银行职员、管理员三类角色的核心业务需求…

微软提出 Logic-RL:基于规则的强化学习释放大语言模型推理能力

❝ 更多 LLM 架构文章点击查看&#xff1a; LLM 架构专栏 大模型架构专栏文章阅读指南 1. AI 智能体&#xff0c;颠覆还是赋能&#xff1f;一文读懂&#xff01; 2. 1W8000 字 解锁 AI 高效运作密码&#xff1a;工作流与智能体如何协同&#xff1f; 3. 万字深度剖析 AI 代理&am…

STM32八股【1】-----启动流程和startup文件理解

启动流程 知识点 MCU 上电复位。MSP从向量表第0个地址读取一个32位&#xff08;2字节&#xff09;的值并保存&#xff0c;该值为栈顶地址。PC计数器从第1个地址读取一个两字节的值并保存&#xff0c;该值为程序入口&#xff0c;一般是Reset_Handler。想了解FLASH地址映射可以…

详解c++20的协程,自定义可等待对象,生成器详解

协程 c20的协程三大标签&#xff1a;“性能之优秀”&#xff0c;“开发之灵活”&#xff0c;“门槛之高” 在讲解c的协程使用前&#xff0c;我们需要先明白协程是什么&#xff0c;协程可以理解为用户态的线程&#xff0c;它需要由程序来进行调度&#xff0c;如上下文切换与调…

JavaEE企业级开发 延迟双删+版本号机制(乐观锁) 事务保证redis和mysql的数据一致性 示例

提醒 要求了解或者熟练掌握以下知识点 spring 事务mysql 脏读如何保证缓存和数据库数据一致性延迟双删分布式锁并发编程 原子操作类 前言 在起草这篇博客之前 我做了点功课 这边我写的是一个示例代码 数据层都写成了 mock 的形式(来源于 JUnit5) // Dduo import java.u…

A2 最佳学习方法

记录自己想法的最好理由是发现自己的想法&#xff0c;并将其组织成可传播的形式 (The best reason for recording what one thinks is to discover what one thinks and to organize it in transmittable form.) Prof Ackoff 经验之谈&#xff1a; 做培训或者写文章&#xff…

嵌入式硬件工程师从小白到入门-PCB绘制(二)

PCB绘制从小白到入门&#xff1a;知识点速通与面试指南 一、PCB设计核心流程 需求分析 明确电路功能&#xff08;如电源、信号处理、通信&#xff09;。确定关键参数&#xff08;电压、电流、频率、接口类型&#xff09;。 原理图设计 元器件选型&#xff1a;匹配封装、电压、…

vue创建子组件步骤及注意事项

在 Vue 中创建子组件需要遵循组件化开发的核心原则&#xff0c;并注意数据流、通信机制、复用性等关键点。以下是详细步骤和注意事项&#xff0c;结合代码示例说明&#xff1a; 一、创建子组件的步骤 1. 定义子组件 创建一个 .vue 文件&#xff08;单文件组件&#xff09;&am…

Cocos Creator版本发布时间线

官网找不到&#xff0c;DeepSeek给的答案&#xff0c;这里做个记录。 Cocos Creator 1.x 系列 发布时间&#xff1a;2016 年 - 2018 年 1.0&#xff08;2016 年 3 月&#xff09;&#xff1a; 首个正式版本&#xff0c;基于 Cocos2d-x 的 2D 游戏开发工具链&#xff0c;集成可…

【Spring AI】基于专属知识库的RAG智能问答小程序开发——功能优化:用户鉴权主体功能开发

系列文章目录 【Spring AI】基于专属知识库的RAG智能问答小程序开发——完整项目&#xff08;含完整前端后端代码&#xff09;【Spring AI】基于专属知识库的RAG智能问答小程序开发——代码逐行精讲&#xff1a;核心ChatClient对象相关构造函数【Spring AI】基于专属知识库的R…

【AI神经网络】深度神经网络(DNN)技术解析:从原理到实践

引言 深度神经网络&#xff08;Deep Neural Network, DNN&#xff09;作为人工智能领域的核心技术&#xff0c;近年来在计算机视觉、自然语言处理、医疗诊断等领域取得了突破性进展。与传统机器学习模型相比&#xff0c;DNN通过多层非线性变换自动提取数据特征&#xff0c;解决…

目标跟踪——deepsort算法详细阐述

deepsort 算法详解 Unmatched Tracks(未匹配的轨迹) 本质角色: 是已存在的轨迹在当前帧中“失联”的状态,即预测位置与检测结果不匹配。 生命周期阶段: 已初始化: 轨迹已存在多帧,可能携带历史信息(如外观特征、运动模型)。 未被观测到: 当前帧中未找到对应的检测框…

Vue-admin-template安装教程

#今天配置后台管理模板发现官方文档的镜像网站好像早失效了&#xff0c;自己稍稍总结了一下方法# 该项目环境需要node17及以下&#xff0c;如果npm install这一步报错可能是这个原因 git clone https://github.com/PanJiaChen/vue-admin-template.git cd vue-admin-template n…

Rust从入门到精通之进阶篇:14.并发编程

并发编程 并发编程允许程序同时执行多个独立的任务&#xff0c;充分利用现代多核处理器的性能。Rust 提供了强大的并发原语&#xff0c;同时通过类型系统和所有权规则在编译时防止数据竞争和其他常见的并发错误。在本章中&#xff0c;我们将探索 Rust 的并发编程模型。 线程基…

算法训练营第二十三天 | 贪心算法(一)

文章目录 一、贪心算法理论基础二、Leetcode 455.分发饼干二、Leetcode 376. 摆动序列三、Leetcode 53. 最大子序和 一、贪心算法理论基础 贪心算法是一种在每一步选择中都采取当前状态下的最优决策&#xff0c;从而希望最终达到全局最优解的算法设计技术。 基本思想 贪心算…

css基础-display 常用布局

CSS display 属性详解 属性设置元素是否被视为块级或行级盒子以及用于子元素的布局&#xff0c;例如流式布局、网格布局或弹性布局。 一、基础显示模式 1. block 作用&#xff1a; 元素独占一行可设置宽高和内外边距默认宽度撑满父容器 应用场景&#xff1a; 布局容器&a…

速卖通API数据清洗实战:从原始JSON到结构化商品数据库

下面将详细介绍如何把速卖通 API 返回的原始 JSON 数据清洗并转换为结构化商品数据库。 1. 数据获取 首先要借助速卖通 API 获取商品数据&#xff0c;以 Python 为例&#xff0c;可使用requests库发送请求并得到 JSON 数据。 import requests# 替换为你的 API Key 和 Secret …