[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.pswp.cn/diannao/75585.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/75585.shtml
英文地址,請注明出處:http://en.pswp.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 …