Spring Boot集成MinIO的詳細步驟

1. 安裝MinIO

使用Docker部署MinIO
  1. 拉取MinIO鏡像

docker pull minio/minio

這將從Docker Hub中獲取最新的MinIO鏡像。

創建目錄

mkdir -p /home/minio/config
mkdir -p /home/minio/data

?這些目錄將用于持久化MinIO的數據和配置文件

創建MinIO容器并運行:?

docker run -p 9000:9000 -p 9090:9090 \--net=host \--name minio \-d --restart=always \-e "MINIO_ACCESS_KEY=minioadmin" \-e "MINIO_SECRET_KEY=minioadmin" \-v /home/minio/data:/data \-v /home/minio/config:/root/.minio \minio/minio server /data --console-address ":9090" -address ":9000"
  1. 這將啟動MinIO服務,使其可以通過主機的9000端口和9090端口進行訪問。

  2. 登錄MinIO控制臺: 安裝完成后,通過瀏覽器訪問MinIO控制臺,默認地址為 http://localhost:9000,使用設置的訪問密鑰和秘密密鑰進行登錄。

2. Spring Boot集成MinIO

添加依賴

pom.xml中添加以下依賴:

<dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.5.2</version>
</dependency>
配置MinIO

application.properties中添加MinIO的配置:

minio.host=http://localhost:9000
minio.access-key=minioadmin
minio.secret-key=minioadmin
minio.bucket=test-bucket

創建MinIO配置類?

import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MinioConfig {@Value("${minio.host}")private String host;@Value("${minio.access-key}")private String accessKey;@Value("${minio.secret-key}")private String secretKey;@Beanpublic MinioClient minioClient() {return MinioClient.builder().endpoint(host).credentials(accessKey, secretKey).build();}
}

創建存儲桶?

import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class MinioService {@Autowiredprivate MinioClient minioClient;public void createBucket(String bucketName) {if (!minioClient.bucketExists(b -> b.bucket(bucketName))) {minioClient.makeBucket(m -> m.bucket(bucketName));}}
}

文件上傳?

import io.minio.MinioClient;
import io.minio.PutObjectResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;import java.io.InputStream;@Service
public class FileUploadService {@Autowiredprivate MinioClient minioClient;public String uploadFile(MultipartFile file, String bucketName, String objectName) throws Exception {try (InputStream inputStream = file.getInputStream()) {PutObjectResponse response = minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).object(objectName).stream(inputStream, file.getSize(), -1).contentType(file.getContentType()).build());return "http://localhost:9000/" + bucketName + "/" + objectName;}}
}

文件下載?

import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;@RestController
public class FileDownloadController {@Autowiredprivate MinioClient minioClient;@GetMapping("/download")public void downloadFile(@RequestParam String bucketName, @RequestParam String objectName, HttpServletResponse response) {try {InputStream stream = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(objectName).build());response.setContentType("application/octet-stream");response.setHeader("Content-Disposition", "attachment; filename=" + objectName);stream.transferTo(response.getOutputStream());} catch (Exception e) {e.printStackTrace();}}
}

通過以上步驟,你可以在Spring Boot中成功集成并使用MinIO進行文件存儲和管理。?

?

?

?

?

?

?

?

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/77133.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/77133.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/77133.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于PLC的停車場車位控制系統的設計

2.1 設計目標 本課題為基于PLC的停車場車位控制系統來設計&#xff0c;在此將功能確定如下&#xff1a; 針對8個車位的停車場進行設計將停車場分為入口處&#xff0c;車位處、以及出口處三個部分&#xff1b;每個車位都有指示燈指示當前位置是否空閑&#xff0c;方便司機查找空…

微服務即時通信系統---(四)框架學習

目錄 ElasticSearch 介紹 安裝 安裝kibana ES客戶端安裝 頭文件包含和編譯時鏈接庫 ES核心概念 索引(Index) 類型(Type) 字段(Field) 映射(mapping) 文檔(document) ES對比MySQL Kibana訪問ES測試 創建索引庫 新增數據 查看并搜索數據 刪除索引 ES…

除了 `task_type=“SEQ_CLS“`(序列分類),還有CAUSAL_LM,QUESTION_ANS

task_type="SEQ_CLS"是什么意思:QUESTION_ANS 我是qwen,不同模型是不一樣的 SEQ_CLS, SEQ_2_SEQ_LM, CAUSAL_LM, TOKEN_CLS, QUESTION_ANS, FEATURE_EXTRACTION. task_type="SEQ_CLS" 通常用于自然語言處理(NLP)任務中,SEQ_CLS 是 Sequence Classif…

Android ViewPager使用預加載機制導致出現頁面穿透問題

? 緣由 在應用中使用ViewPager&#xff0c;并且設置預加載頁面。結果出現了一些異常的現象。 我們有4個頁面&#xff0c;分別是4個Fragment&#xff0c;暫且稱為FragmentA、FragmentB、FragmentC、FragmentD&#xff0c;ViewPager在MainActivity中&#xff0c;切換時&#x…

apt3.0和apt2.0的區別

一&#xff0c;簡單區別 更新方式 apt2.0&#xff1a;一次性更新所有內容&#xff0c;沒有分階段更新功能。apt3.0&#xff1a;引入分階段更新功能&#xff0c;可分批推送更新包。 界面顯示 apt2.0&#xff1a;界面簡單&#xff0c;輸出信息較為雜亂&#xff0c;沒有彩色高亮和…

過電壓保護器與傳統的保護方式對比

過電壓保護器主要用于保護電氣設備免受大氣過電壓&#xff08;如雷擊&#xff09;和操作過電壓&#xff08;開關動作等引發&#xff09;的侵害。它通常由非線性電阻片等元件組成&#xff0c;利用其獨特的伏安特性工作。正常電壓下&#xff0c;保護器呈現高阻態&#xff0c;幾乎…

機器學習(3)——決策樹

文章目錄 1. 決策樹基本原理1.1. 什么是決策樹&#xff1f;1.2. 決策樹的基本構成&#xff1a;1.3. 核心思想 2. 決策樹的構建過程2.1. 特征選擇2.1.1. 信息增益&#xff08;ID3&#xff09;2.1.2. 基尼不純度&#xff08;CART&#xff09;2.1.3. 均方誤差&#xff08;MSE&…

充電樁領域垂直行業大模型分布式推理與訓練平臺建設方案 - 慧知開源充電樁平臺

沒有任何廣告&#xff01; 充電樁領域垂直行業大模型分布式推理與訓練平臺建設方案 一、平臺定位與核心價值 行業首個垂直化AI平臺 專為充電樁運營場景設計的分布式大模型訓練與推理基礎設施&#xff0c;實現"算力-算法-場景"三位一體閉環管理。 核心價值主張&am…

NLP高頻面試題(四十五)——PPO 算法在 RLHF 中的原理與實現詳解

近端策略優化(Proximal Policy Optimization, PPO)算法是強化學習領域的一種新穎且高效的策略優化方法,在近年大規模語言模型的人類反饋強化學習(Reinforcement Learning with Human Feedback, RLHF)中發揮了關鍵作用。本文將以學術嚴謹的風格,詳細闡述 PPO 算法的原理及…

C++指針和引用之區別(The Difference between C++Pointers and References)

面試題&#xff1a;C指針和引用有什么區 C指針和引用有什么區別&#xff1f; 在 C 中&#xff0c;指針和引用都是用來訪問其他變量的值的方式&#xff0c;但它們之間存在一些重要的區別。了解這些區別有助于更好地理解和使用這兩種工具。 01 指針 指針&#xff08;Pointer…

LWIP學習筆記

TCP/ip協議結構分層 傳輸層簡記 TCP&#xff1a;可靠性強&#xff0c;有重傳機制 UDP&#xff1a;單傳機制&#xff0c;不可靠 UDP在ip層分片 TCP在傳輸層分包 應用層傳輸層網絡層&#xff0c;構成LWIP內核程序&#xff1a; 鏈路層&#xff1b;由mac內核STM芯片的片上外設…

【經驗記錄貼】活用shell,提高工作效率

背景 最近在做測試的時候&#xff0c;需要手動kill服務的進程&#xff0c;然后通過命令重啟服務&#xff0c;再進行測試。每次重啟都會涉及到下面三個命令的執行&#xff1a; 1&#xff09;檢索進程ID $ ps -eLf | grep programname root 1123 112 1234 0 0 0 0:00…

MacOS 系統下 Git 的詳細安裝步驟與基礎設置指南

MacOS 系統下 Git 的詳細安裝步驟與基礎設置指南—目錄 一、安裝 Git方法 1&#xff1a;通過 Homebrew 安裝&#xff08;推薦&#xff09;方法 2&#xff1a;通過 Xcode Command Line Tools 安裝方法 3&#xff1a;手動下載安裝包 二、基礎配置1. 設置全局用戶名和郵箱2. 配置 …

一文讀懂 AI

2022年11月30日&#xff0c;OpenAI發布了ChatGPT&#xff0c;2023年3月15日&#xff0c;GPT-4引發全球轟動&#xff0c;讓世界上很多人認識了ai這個詞。如今已過去快兩年半&#xff0c;AI產品層出不窮&#xff0c;如GPT-4、DeepSeek、Cursor、自動駕駛等&#xff0c;但很多人仍…

【教程】檢查RDMA網卡狀態和測試帶寬 | 附測試腳本

轉載請注明出處&#xff1a;小鋒學長生活大爆炸[xfxuezhagn.cn] 如果本文幫助到了你&#xff0c;歡迎[點贊、收藏、關注]哦~ 目錄 檢查硬件和驅動狀態 測試RDMA通信 報錯修復 對于交換機的配置&#xff0c;可以看這篇&#xff1a; 【教程】詳解配置多臺主機通過交換機實現互…

計算機網絡 - TCP協議

通過一些問題來討論 TCP 協議 什么是 TCP &#xff1f;舉幾個應用了 TCP 協議的例子TCP協議如何保證可靠性&#xff1f;tcp如何保證不會接受重復的報文&#xff1f;Tcp粘包拆包問題了解嗎&#xff1f;介紹一下&#xff0c;如何解決&#xff1f;TCP擁塞控制與流量控制區別&…

Fiddler 進行斷點測試:調試網絡請求

目錄 一、什么是斷點測試&#xff1f; 二、Fiddler 的斷點功能 三、如何在 Fiddler 中設置斷點&#xff1f; 步驟 1&#xff1a;啟動 Fiddler 步驟 2&#xff1a;啟用斷點 步驟 3&#xff1a;捕獲請求 步驟 4&#xff1a;修改請求或響應 四、案例&#xff1a;模擬登錄失…

OpenCv高階(三)——圖像的直方圖、圖像直方圖的均衡化

目錄 一、直方圖 1、計算并顯示直方圖 2、使用matplotlib方法繪制直方圖&#xff08;不劃分小的子區間&#xff09; 3、使用opencv的方法繪制直方圖 &#xff08;劃分16個小的子亮度區間&#xff09; 4、繪制彩色圖像的直方圖&#xff0c;將各個通道的直方圖值都畫出來 二、…

Flutter 與原生通信

Flutter 與原生之間的通信主要基于通道機制&#xff0c;包括 MethodChannel、EventChannel 和 BasicMessageChannel。 MethodChannel&#xff1a;用于 Flutter 與原生之間的方法調用&#xff0c;實現雙向通信&#xff0c;適合一次性的方法調用并獲取返回值&#xff0c;如 Flut…

前端面試-Vue篇

核心概念 Vue 3的響應式原理與Vue 2有何本質區別&#xff1f;Vue中虛擬DOM的diff算法優化策略有哪些&#xff1f;Vue組件間通信方式有哪些&#xff1f;適用場景分別是什么&#xff1f;Vue的生命周期鉤子在Composition API中如何替代&#xff1f;Vue的模板編譯過程是怎樣的&…