欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot3.X 整合 MinIO 存儲(chǔ)原生方案

 更新時(shí)間:2025年07月11日 11:57:46   作者:軟件編程在線接單(需要可私)  
本文詳細(xì)介紹了SpringBoot3.X整合MinIO的原生方案,從環(huán)境搭建到核心功能實(shí)現(xiàn),涵蓋了文件上傳、下載、刪除等常用操作,并補(bǔ)充了異常處理、參數(shù)校驗(yàn)、安全實(shí)踐等內(nèi)容,感興趣的朋友一起看看吧

SpringBoot3.X整合MinIO存儲(chǔ)原生方案:從環(huán)境搭建到實(shí)戰(zhàn)開發(fā)

一、前言:為什么選擇MinIO?

在分布式存儲(chǔ)領(lǐng)域,MinIO作為一款高性能的對(duì)象存儲(chǔ)服務(wù),憑借兼容S3 API、輕量級(jí)部署、支持分布式集群等特性,成為企業(yè)級(jí)文件存儲(chǔ)的熱門選擇。尤其在SpringBoot生態(tài)中,通過原生SDK整合MinIO可以快速實(shí)現(xiàn)文件的上傳、下載、刪除等功能,適用于云存儲(chǔ)、大數(shù)據(jù)場(chǎng)景、內(nèi)容管理系統(tǒng)等多種業(yè)務(wù)場(chǎng)景。

本文將基于SpringBoot3.X版本,從零開始構(gòu)建MinIO文件存儲(chǔ)方案,涵蓋環(huán)境準(zhǔn)備、依賴配置、核心功能開發(fā)、進(jìn)階特性及問題排查,幫助開發(fā)者快速掌握原生整合方案。

二、環(huán)境準(zhǔn)備

1. 基礎(chǔ)環(huán)境清單

  • JDK 17+(SpringBoot3.X最低要求)
  • Maven 3.6+
  • MinIO服務(wù)(本文使用虛擬機(jī)部署的MinIO)
  • IDE:IntelliJ IDEA 2024.3

2. MinIO服務(wù)部署

如果沒有現(xiàn)成的MinIO服務(wù),可通過Docker快速部署本地測(cè)試環(huán)境:

# 拉取鏡像
mkdir -p /minio/data
 chmod 777 /minio/data
 docker run \-d --restart=always \--name minio \--hostname minio-server \
 -p 9000:9000 \-p 9001:9001 \-v /minio/data:/bitnami/minio/data \-e MINIO_ROOT_USER="minio_root" \-e MINIO_ROOT_PASSWORD="minio_123456" \-e MINIO_DEFAULT_BUCKETS="bucket" \-e "MINIO_SERVER_URL=http://192.168.229.128:9000" \
 bitnami/minio:2023.12.7

啟動(dòng)后訪問http://192.168.229.128:9001,使用賬號(hào)(minio_root)密碼(minio_123456)登錄控制臺(tái),創(chuàng)建本文所需的ai-pan桶(Bucket)。

注意ip需要改成自己的,訪問頁(yè)面如下,輸入賬號(hào)密碼,點(diǎn)擊login

成功進(jìn)入頁(yè)面之后,創(chuàng)建我們的Bucket

三、項(xiàng)目初始化與依賴配置

1. 創(chuàng)建SpringBoot項(xiàng)目

通過Spring Initializr創(chuàng)建項(xiàng)目,選擇以下依賴:

  • Spring Web(用于接口開發(fā))
  • Lombok(簡(jiǎn)化實(shí)體類代碼)

2. 核心依賴引入

pom.xml中添加MinIO SDK依賴(注意版本兼容性,8.3.7兼容SpringBoot3):

<dependency>
  <groupId>io.minio</groupId>
  <artifactId>minio</artifactId>
  <version>8.3.7</version>
</dependency>
<!-- 工具類依賴(非必需,用于文件路徑處理) -->
<dependency>
  <groupId>cn.hutool</groupId>
  <artifactId>hutool-all</artifactId>
  <version>5.8.20</version>
</dependency>
<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.30</version>
		</dependency>

四、配置詳解

1. 核心配置文件(application.yml)

# MinIO核心配置
minio:
  endpoint: http://192.168.229.128:9000 # API訪問地址
  access-key: minio_root # 訪問密鑰
  access-secret: minio_123456 # 密鑰密碼
  bucket-name: ai-pan # 創(chuàng)建的桶名稱

2. MinIO配置類

import io.minio.MinioClient;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Data
@Component
@ConfigurationProperties(prefix = "minio")
public class MinioConfig {
    @Value("endpoint")
    private String endpoint;
    @Value("access-key")
    private String accessKey;
    @Value("access-secret")
    private String accessSecret;
    @Value("bucket-name")
    private String bucketName;
    // 預(yù)簽名url過期時(shí)間(ms)
    private Long PRE_SIGN_URL_EXPIRE = 60 * 10 * 1000L;
    @Bean
    public MinioClient getMinioClient() {
        return MinioClient.builder()
                .endpoint(endpoint)
                .credentials(accessKey, accessSecret)
                .build();
    }
}

五、核心功能開發(fā)

1. 工具類:文件路徑生成

public class CommonUtil {
   public static String getFilePath(String fileName) {
        String suffix = getFileSuffix(fileName);
        // ?成?件在存儲(chǔ)桶中的唯?鍵
        return StrUtil.format("{}/{}/{}/{}.{}", DateUtil.thisYear(),
                DateUtil.thisMonth() + 1,DateUtil.thisDayOfMonth(), IdUtil.randomUUID(), suffix);
    }
}

2. 控制器(TestController)

@RestController
@RequestMapping("/api/test/v1")
public class TestController {
    @Autowired
    private MinioConfig minioConfig;
    @Autowired
    private MinioClient minioClient;
    @PostMapping("/upload")
    public JsonData upload(@RequestParam("file") MultipartFile file) {
        String filename = CommonUtil.getFilePath(file.getOriginalFilename());
        try {
            InputStream inputStream = file.getInputStream();
            minioClient.putObject(PutObjectArgs.builder()
                    .bucket(minioConfig.getBucketName())
                    .object(filename)
                    .stream(inputStream, file.getSize(), -1)
                    .contentType(file.getContentType())
                    .build());
        } catch (Exception e) {
            e.printStackTrace();
        }
      String url =  minioConfig.getEndpoint() + "/" + minioConfig.getBucketName() +
                "/" + filename;
        return JsonData.buildSuccess(url);
    }
}
// 統(tǒng)一響應(yīng)類
@Data
public class JsonData {
    private int code;
    private String msg;
    private Object data;
    public static JsonData buildSuccess(Object data) {
        JsonData jsonData = new JsonData();
        jsonData.setCode(0);
        jsonData.setData(data);
        return jsonData;
    }
}

六、測(cè)試與驗(yàn)證

1. 接口測(cè)試(Apifox)

  • 文件上傳
    • 請(qǐng)求方式:POST
    • URL:http://localhost:8081/api/test/v1/upload
    • 參數(shù):form-data,key=file,value=選擇本地文件
    • 響應(yīng):返回文件訪問URL

Header需要我們選擇如下

Body需要我們選擇如下,并上傳本地文件

結(jié)果如下:

2. 控制臺(tái)驗(yàn)證

登錄MinIO控制臺(tái),進(jìn)入ai-pan桶,查看上傳的文件是否存在。

七、注意事項(xiàng)

桶權(quán)限管理

  • 若未設(shè)置桶為公開訪問,直接訪問URL會(huì)報(bào)403錯(cuò)誤,需使用預(yù)簽名URL(getPresignedDownloadUrl方法)
  • 設(shè)置公開訪問:在MinIO控制臺(tái)→桶設(shè)置→訪問策略→添加規(guī)則,允許所有人訪問

八、總結(jié)

本文詳細(xì)介紹了SpringBoot3.X整合MinIO的原生方案,從環(huán)境搭建到核心功能實(shí)現(xiàn),涵蓋了文件上傳、下載、刪除等常用操作,并補(bǔ)充了異常處理、參數(shù)校驗(yàn)、安全實(shí)踐等內(nèi)容。通過原生SDK整合,開發(fā)者可以靈活定制存儲(chǔ)邏輯,滿足不同業(yè)務(wù)場(chǎng)景需求。

MinIO作為輕量級(jí)對(duì)象存儲(chǔ)方案,非常適合中小規(guī)模項(xiàng)目使用,結(jié)合SpringBoot的自動(dòng)化配置,能大幅提升開發(fā)效率。后續(xù)可進(jìn)一步擴(kuò)展斷點(diǎn)續(xù)傳、文件預(yù)覽、權(quán)限控制等功能,豐富存儲(chǔ)服務(wù)的能力。

到此這篇關(guān)于SpringBoot3.X 整合 MinIO 存儲(chǔ)原生方案的文章就介紹到這了,更多相關(guān)SpringBoot3.X MinIO 存儲(chǔ)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中的synchronized鎖膨脹詳解

    Java中的synchronized鎖膨脹詳解

    這篇文章主要介紹了Java中的synchronized鎖膨脹詳解,正常創(chuàng)建的對(duì)象,狀態(tài)為無鎖,對(duì)象頭的Mark?Word?中主要記錄了?對(duì)象的年齡,也就是經(jīng)歷了多少次GC還存活下來,需要的朋友可以參考下
    2024-01-01
  • SpringBoot實(shí)現(xiàn)全局異常處理方法總結(jié)

    SpringBoot實(shí)現(xiàn)全局異常處理方法總結(jié)

    在項(xiàng)目開發(fā)中出現(xiàn)異常時(shí)很平常不過的事情,我們處理異常也有很多種方式。本文將詳細(xì)為大家講解SpringBoot實(shí)現(xiàn)全局異常處理幾種方法,感興趣的可以學(xué)習(xí)一下
    2022-03-03
  • 剖析Java中的事件處理與異常處理機(jī)制

    剖析Java中的事件處理與異常處理機(jī)制

    這篇文章主要介紹了Java中的事件處理與異常處理機(jī)制,講解Java是如何對(duì)事件或者異常作出響應(yīng)以及定義異常的一些方法,需要的朋友可以參考下
    2016-01-01
  • 如何使用Idea搭建全注解式開發(fā)的SpringMVC項(xiàng)目

    如何使用Idea搭建全注解式開發(fā)的SpringMVC項(xiàng)目

    這篇文章主要介紹了如何使用Idea搭建全注解式開發(fā)的SpringMVC項(xiàng)目,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • maven項(xiàng)目不編譯xml文件問題

    maven項(xiàng)目不編譯xml文件問題

    這篇文章主要介紹了maven項(xiàng)目不編譯xml文件問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-09-09
  • Spring?Integration概述與怎么使用詳解

    Spring?Integration概述與怎么使用詳解

    公司項(xiàng)目需要用到spring integration,而網(wǎng)上關(guān)于spring integration的有價(jià)值的參考資料比較少,下面這篇文章主要給大家介紹了關(guān)于Spring?Integration概述與怎么使用的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • 使用SpringAOP實(shí)現(xiàn)公共字段填充功能

    使用SpringAOP實(shí)現(xiàn)公共字段填充功能

    在新增員工或者新增菜品分類時(shí)需要設(shè)置創(chuàng)建時(shí)間、創(chuàng)建人、修改時(shí)間、修改人等字段,在編輯員工或者編輯菜品分類時(shí)需要設(shè)置修改時(shí)間、修改人等字段,這些字段屬于公共字段,本文將給大家介紹使用SpringAOP實(shí)現(xiàn)公共字段填充功能,需要的朋友可以參考下
    2024-08-08
  • Java Thread之Sleep()使用方法總結(jié)

    Java Thread之Sleep()使用方法總結(jié)

    這篇文章主要介紹了Java Thread之Sleep()使用方法總結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Java SwingWorkder使用實(shí)例

    Java SwingWorkder使用實(shí)例

    最近在學(xué)習(xí)Swing,我們都知道在UI表現(xiàn)線程里面長(zhǎng)時(shí)間執(zhí)行操作時(shí),畫面會(huì)假死,為了能夠讓費(fèi)時(shí)操作不影響畫面表現(xiàn),就需要用多線程了
    2014-04-04
  • 為什么在重寫 equals方法的同時(shí)必須重寫 hashcode方法

    為什么在重寫 equals方法的同時(shí)必須重寫 hashcode方法

    Object 類是所有類的父類,其 equals 方法比較的是兩個(gè)對(duì)象的引用指向的地址,hashcode 是一個(gè)本地方法,返回的是對(duì)象地址值。他們都是通過比較地址來比較對(duì)象是否相等的
    2016-07-07

最新評(píng)論