最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot3.X 整合 MinIO 存儲原生方案

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

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

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

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

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

二、環(huán)境準備

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

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

2. MinIO服務部署

如果沒有現(xiàn)成的MinIO服務,可通過Docker快速部署本地測試環(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

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

注意ip需要改成自己的,訪問頁面如下,輸入賬號密碼,點擊login

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

三、項目初始化與依賴配置

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

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

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

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;
    // 預簽名url過期時間(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);
        // ?成?件在存儲桶中的唯?鍵
        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)一響應類
@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;
    }
}

六、測試與驗證

1. 接口測試(Apifox)

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

Header需要我們選擇如下

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

結果如下:

2. 控制臺驗證

登錄MinIO控制臺,進入ai-pan桶,查看上傳的文件是否存在。

七、注意事項

桶權限管理

  • 若未設置桶為公開訪問,直接訪問URL會報403錯誤,需使用預簽名URL(getPresignedDownloadUrl方法)
  • 設置公開訪問:在MinIO控制臺→桶設置→訪問策略→添加規(guī)則,允許所有人訪問

八、總結

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

MinIO作為輕量級對象存儲方案,非常適合中小規(guī)模項目使用,結合SpringBoot的自動化配置,能大幅提升開發(fā)效率。后續(xù)可進一步擴展斷點續(xù)傳、文件預覽、權限控制等功能,豐富存儲服務的能力。

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

相關文章

最新評論

来宾市| 社会| 仁寿县| 建瓯市| 安康市| 巴彦淖尔市| 望江县| 连平县| 汝城县| 彭山县| 天气| 酉阳| 富川| 闻喜县| 胶南市| 贵港市| 黄大仙区| 应城市| 青冈县| 瑞昌市| 乌兰察布市| 五莲县| 郓城县| 大理市| 新竹县| 鄯善县| 遵义市| 金湖县| 旬阳县| 咸宁市| 乾安县| 师宗县| 尤溪县| 山丹县| 庐江县| 安西县| 饶河县| 玉溪市| 任丘市| 岳阳县| 垣曲县|