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

news2025/4/1 0:16:55

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 {
    @Resource
    private MinioService minioService;

    @Test
    void contextLoads(){
        minioService.testMinIOClient();
    }


    @Resource
    private MinioClient minioClient;

    @Test
    public 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.coloradmin.cn/o/2322356.html

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

相关文章

ISIS-3 LSDB链路状态数据库同步

上一章我们介绍了ISIS的邻居建立关系以及ISIS的路由器角色有哪些,在不同的网络类型当中建立邻居关系有什么不同,并且以实验案例抓包的形式给大家进一步介绍了建立的过程。 这一章我们来介绍ISIS中是如何实现链路状态数据库同步的,与OSPF的链路状态同步有什么不同,在不同网络类…

快速入手-基于Django的Form和ModelForm操作(七)

1、Form组件 2、ModelForm操作 3、给前端表单里在django里添加class相关属性值 4、前端 5、后端form 新增数据处理 6、更新数据处理

Springboot集成Debezium监听postgresql变更

1.创建springboot项目引入pom <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>io.debezium</groupI…

Ubuntu22.04搭建freeradius操作说明

Ubuntu22.04搭建freeradius操作说明 更新依赖库 sudo apt update sudo apt install build-essential sudo apt install libtalloc-dev sudo apt install libssl-dev 按照freeradius sudo apt install freeradius 修改freeradius配置 文件路径如下 /etc/freeradius/3.…

【重装系统】全流程记录,在 MacOS 的电脑上烧录 Ubuntu 启动盘

背景 Ubuntu 无法联网&#xff0c;排查下来应该是网卡驱动的问题&#xff0c;安装驱动的过程中又缺失各种包需要网络&#xff0c;陷入死循环。 全流程以及相关资料 整体流程参考&#xff1a;【史上最全】重装ubuntu20.04系统基本环境配置 烧录启动盘启动盘插入需要重装的服务…

去中心化金融

什么是去中心化金融 去中心化金融&#xff08;Decentralized Finance&#xff0c;简称 DeFi&#xff09;是一种基于区块链技术构建的金融系统&#xff0c;旨在通过去除传统金融机构&#xff08;如银行、证券公司等&#xff09;作为中介&#xff0c;提供各种金融服务。这些服务…

centos 7 部署FTP 服务用shell 脚本搭建

#!/bin/bash# 检查是否以root身份运行脚本 if [ "$EUID" -ne 0 ]; thenecho "请以root身份运行此脚本。"exit 1 fi# 安装vsftpd yum install -y vsftpd# 启动vsftpd服务并设置开机自启 systemctl start vsftpd systemctl enable vsftpd# 配置防火墙以允许F…

VMware启动虚拟机报“另一个程序已锁定文件的一部分,进程无法访问”

解决方案&#xff1a; 1&#xff09;定位到虚拟机磁盘目录&#xff0c;我这里是“E\VM_Disk\CactiEZ\”这个目录&#xff0c;每个人目录不一样&#xff0c;详见上图报错位置 2&#xff09;在这个目录中找到后缀名以“.lck”结尾的目录&#xff0c;将所有以 .lck 结尾的目录删…

CPU架构和微架构

CPU架构&#xff08;CPU Architecture&#xff09; CPU架构是指处理器的整体设计框架&#xff0c;定义了处理器的指令集、寄存器、内存管理方式等。它是处理器设计的顶层规范&#xff0c;决定了软件如何与硬件交互。 主要特点&#xff1a; 指令集架构&#xff08;ISA, Instr…

帕金森病致生活艰难,如何缓解心理负担?

你是否留意到身边有人手部不由自主地颤抖&#xff0c;且肢体变得僵硬&#xff0c;行动也愈发迟缓&#xff1f;这很可能是帕金森病的症状。帕金森病是一种常见的神经系统退行性疾病&#xff0c;多发生于中老年人。​ 静止性震颤往往是帕金森病的首发症状&#xff0c;患者在安静状…

[Windows] Edge浏览器_134.0.3124.83绿色便携增强版-集成官方Deepseek侧边栏

微软Edge浏览器 绿色便携增强版 长期更新 链接&#xff1a;https://pan.xunlei.com/s/VOMA-aVC_GPJiv-MzRS89lsVA1?pwdemxj# Edge浏览器_134.0.3124.83绿色便携增强版-集成官方Deepseek侧边栏

从零构建大语言模型全栈开发指南:第二部分:模型架构设计与实现-2.2.3实战案例:在笔记本电脑上运行轻量级LLM

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 实战案例:在笔记本电脑上运行轻量级LLM2.2.3 模型架构设计与实现1. 环境与工具准备1.1 硬件要求1.2 软件栈选择2. 轻量级模型架构设计2.1 模型参数配置2.2 关键技术优化3. 实战流程3.1 数据准备流程3.2…

CAN基础知识学习二

一、控制器局域网总线&#xff08;CAN&#xff0c;Controller Area Network&#xff09;&#xff1b; 二、CAN FD 是CAN with Flexible Data rate的缩写&#xff0c;翻译为【可变速率的 CAN】 CAN-FD 采用了两种位速率&#xff1a;从控制场中的 BRS 位到 ACK 场之前&#xff08…

新能源行业:卓越 UE/UI 设计,引领业务腾飞的新引擎

在全球积极推动可持续发展的大背景下&#xff0c;新能源行业蓬勃兴起&#xff0c;成为经济发展的新引擎。在这个充满机遇与挑战的赛道上&#xff0c;优秀的用户体验&#xff08;UE&#xff09;和用户界面&#xff08;UI&#xff09;设计正扮演着愈发关键的角色&#xff0c;它不…

Docker镜像相关命令(Day2)

文章目录 前言一、问题描述二、相关命令1.查看镜像2.搜索镜像3.拉取镜像4.删除镜像5.镜像的详细信息6.标记镜像 三、验证与总结 前言 Docker 是一个开源的容器化平台&#xff0c;它让开发者能够将应用及其依赖打包到一个标准化的单元&#xff08;容器&#xff09;中运行。在 D…

LangChain4J开源开发框架简介

目录 1.1、前言1.2、集成方式简单1.3、核心功能与优势1.4、两种调用方式1.5、链式调用示例代码1.6、AI服务调用示例代码1.7、典型使用场景1.8、总结 1.1、前言 LangChain4J 是一个专为 Java 开发者设计的开源框架&#xff0c;旨在简化大型语言模型&#xff08;LLMs&#xff09;…

SpringBoot集成Elasticsearch 7.x spring-boot-starter-data-elasticsearch 方式

SpringBoot集成Elasticsearch 7.x | spring-boot-starter-data-elasticsearch 方式 前言添加maven依赖配置application.properties测试实体类 方式一&#xff1a;继承 ElasticsearchRepository&#xff08;适合简单查询&#xff09; 直接使用想自定义自己的Repository接口 方式…

STM32蜂鸣器播放音乐

STM32蜂鸣器播放音乐 STM32蜂鸣器播放音乐 Do, Re, Mi, Fa, 1. 功能概述 本系统基于STM32F7系列微控制器&#xff0c;实现了以下功能&#xff1a; 通过7个按键控制蜂鸣器发声&#xff0c;按键对应不同的音符。每个按键对应一个音符&#xff08;Do, Re, Mi, Fa, Sol, La, Si&a…

解码未来:DeepSeek开源FlashMLA,推理加速核心技术,引领AI变革

前言&#xff1a; DeepSeek 兑现了自己的诺言&#xff0c;开源了一款用于 Hopper GPU 的高效型 MLA 解码核&#xff1a;FlashMLA。 项目地址&#xff1a;https://github.com/deepseek-ai/FlashMLA 1:FlashMLA 是什么呀&#xff1f; MLA是DeepSeek大模型的重要技术创新点&…

leetcode:136. 只出现一次的数字(python3解法)

难度&#xff1a;简单 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题&#xff0c;且该算法只使用常量额外空间。 示例 1 &#xf…