国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

在 Spring Boot 中集成 MinIO 對象存儲

這篇具有很好參考價值的文章主要介紹了在 Spring Boot 中集成 MinIO 對象存儲。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

MinIO 是一個開源的對象存儲服務器,專注于高性能、分布式和兼容S3 API的存儲解決方案。本文將介紹如何在 Spring Boot 應用程序中集成 MinIO,以便您可以輕松地將對象存儲集成到您的應用中。

安裝minio

  1. 拉取 minio Docker鏡像

    docker pull minio/minio
    
  2. 創(chuàng)建minio數(shù)據(jù)和配置目錄

    mkdir -p /data/minio/data /data/minio/config
    
  3. 運行minio容器,設置訪問和密鑰并掛載數(shù)據(jù)卷

    docker run -p 9090:9090 -p 9000:9000 --name minio \
      -v ~/data/minio/data:/data \
      -v ~/data/minio/config:/root/.minio \
      -e "MINIO_ACCESS_KEY=minio" \
      -e "MINIO_SECRET_KEY=minio123" \
      minio/minio server /data --console-address ":9090"
    

或者 使用 docker-compose.yml

version: '3.9'
services:
    minio:
        command: 'server /data --console-address ":9090"'
        image: minio/minio
        environment:
            - MINIO_SECRET_KEY=minio123
            - MINIO_ACCESS_KEY=minio
        volumes:
            - '~/data/minio/config:/root/.minio'
            - '~/data/minio/data:/data'
        container_name: minio
        ports:
            - '9000:9000'
            - '9090:9090'

  • mkdir``~/minio/data在您的主目錄中創(chuàng)建一個新的本地目錄。
  • docker run啟動 MinIO 容器。
  • -p將本地端口綁定到容器端口。
  • -name為容器創(chuàng)建一個名稱。
  • -v將文件路徑設置為容器要使用的持久卷位置。當 MinIO 將數(shù)據(jù)寫入 時/data,該數(shù)據(jù)會鏡像到本地路徑~/minio/data,從而允許其在容器重新啟動之間保留。您可以替換~/minio/data為用戶具有讀取、寫入和刪除訪問權限的另一個本地文件位置。
  • -e分別設置環(huán)境變量MINIO_ROOT_USERMINIO_ROOT_PASSWORD。這些設置root 用戶憑據(jù)。更改用于您的容器的示例值。

運行結果

WARNING: MINIO_ACCESS_KEY and MINIO_SECRET_KEY are deprecated.
         Please use MINIO_ROOT_USER and MINIO_ROOT_PASSWORD
Formatting 1st pool, 1 set(s), 1 drives per set.
WARNING: Host local has more than 0 drives of set. A host failure will result in data becoming unavailable.
MinIO Object Storage Server
Copyright: 2015-2023 MinIO, Inc.
License: GNU AGPLv3 <https://www.gnu.org/licenses/agpl-3.0.html>
Version: RELEASE.2023-08-29T23-07-35Z (go1.19.12 linux/amd64)

Status:         1 Online, 0 Offline. 
S3-API: http://172.17.0.2:9000  http://127.0.0.1:9000 
Console: http://172.17.0.2:9090 http://127.0.0.1:9090 

Documentation: https://min.io/docs/minio/linux/index.html
Warning: The standard parity is set to 0. This can lead to data loss.
  1. 登錄 控制臺 http://127.0.0.1:9090/browser 用戶名密碼是你啟動時初始化的這里是 minio、minio123
  2. 創(chuàng)建 桶(Buckets)
    在 Spring Boot 中集成 MinIO 對象存儲,minio,spring boot

參考:

  1. https://min.io/docs/minio/container/index.html

Spring Boot 集成

1. 添加 MinIO 客戶端依賴

在您的 Spring Boot 項目的 pom.xml 文件中添加 MinIO 客戶端依賴:

<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>8.5.5</version>
</dependency>

接下來,您需要在您的Spring Boot應用程序中配置MinIO客戶端。您可以在application.propertiesapplication.yml文件中添加以下配置:

# MinIO配置
minio.endpoint=http://localhost:9000  # MinIO服務器的地址
minio.access-key=minio     # 您的訪問密鑰
minio.secret-key=minio123     # 您的秘密密鑰
2. 創(chuàng)建 MinIO 配置類

創(chuàng)建一個配置類,用于初始化 MinIO 客戶端。創(chuàng)建一個名為 MinioConfig 的類:

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.endpoint}")
    private String endpoint;

    @Value("${minio.access-key}")
    private String accessKey;

    @Value("${minio.secret-key}")
    private String secretKey;

    @Bean
    public MinioClient minioClient() {
        return MinioClient.builder()
                .endpoint(endpoint)
                .credentials(accessKey, secretKey)
                .build();
    }
}
3. 集成 MinIO 操作到您的應用

您可以在您的服務或控制器中使用 MinioClient 來進行 MinIO 操作。以下是一個上傳文件到 MinIO 的示例:


import io.minio.GetObjectArgs;
import io.minio.GetObjectResponse;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import okhttp3.Headers;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.UUID;

@RestController
@RequestMapping("/minio")
public class MinioController {

    @Autowired
    private MinioClient minioClient;

    @PostMapping("/upload")
    public String uploadFile(@RequestParam("file") MultipartFile file) {
        try {
            /**
             * 使用 UUID 作為對象名稱:
             * 1. 唯一性,避免對象名稱沖突。
             * 2. 隱藏實際文件信息,提高一定的隱私。
             * 3. 對象名稱不受原始文件名長度或特殊字符的限制。
             * 在實際場景中,如果你更注重文件的可識別性和管理,可以考慮使用文件名稱。如果你更注重唯一性和隱私性,可以考慮使用 UUID。
             * 同時,你也可以結合兩者,例如將文件名作為對象屬性存儲,然后使用 UUID 作為對象名稱。這樣既可以保留文件信息,又能保證唯一性。
             */
            String objectName = UUID.randomUUID().toString();
            Map<String, String> metadata = new HashMap<>();
            metadata.put("originalFilename", file.getOriginalFilename());

            minioClient.putObject(
                    PutObjectArgs.builder()
                            .bucket("firsttest")
                            .object(objectName)
                            .userMetadata(metadata)
                            .stream(file.getInputStream(), file.getSize(), -1)
                            .contentType(file.getContentType())
                            .build()
            );
            return "File uploaded successfully!  fileId: " + objectName;
        } catch (Exception e) {
            return "Error uploading file: " + e.getMessage();
        }
    }

    @GetMapping("/download/{filename}")
    public ResponseEntity<InputStreamResource> downloadFile(@PathVariable("filename") String filename) {
        try {
            Optional<GetObjectResponse> inputStream = Optional.ofNullable(minioClient.getObject(
                    GetObjectArgs.builder()
                            .bucket("firsttest")
                            .object(filename)
                            .build()
            ));
            if (inputStream.isPresent()) {
                InputStreamResource resource = new InputStreamResource(inputStream.get());
                Headers headers = inputStream.get().headers();
                ResponseEntity.BodyBuilder bodyBuilder = ResponseEntity.ok();
                String mediaType = headers.get("Content-Type");
                if (StringUtils.isNotEmpty(mediaType)) {
                    bodyBuilder.contentType(MediaType.parseMediaType(mediaType));
                }
                return bodyBuilder.header("Content-Disposition", "attachment; filename=" + URLEncoder.encode(headers.get("X-Amz-Meta-originalfilename"), StandardCharsets.UTF_8))
                        .body(resource);
            } else {
                return ResponseEntity.notFound().build();
            }
        } catch (Exception e) {
            return ResponseEntity.badRequest().body(null);
        }
    }

}

使用 UUID 作為對象名稱:

  1. 唯一性,避免對象名稱沖突。
  2. 隱藏實際文件信息,提高一定的隱私。
  3. 對象名稱不受原始文件名長度或特殊字符的限制。

在實際場景中,如果你更注重文件的可識別性和管理,可以考慮使用文件名稱。如果你更注重唯一性和隱私性,可以考慮使用 UUID。
同時,你也可以結合兩者,例如將文件名作為對象屬性存儲,然后使用 UUID 作為對象名稱。這樣既可以保留文件信息,又能保證唯一性。

http://127.0.0.1:80/minio/upload 上傳完畢成功后,控制臺查看文件
在 Spring Boot 中集成 MinIO 對象存儲,minio,spring boot
在 Spring Boot 中集成 MinIO 對象存儲,minio,spring boot
在 Spring Boot 中集成 MinIO 對象存儲,minio,spring boot
在 Spring Boot 中集成 MinIO 對象存儲,minio,spring boot

自定義 metadata 為啥前綴有 X-Amz-Meta-?

在 MinIO 中,當你設置自定義元數(shù)據(jù)(metadata)時,MinIO 會遵循 Amazon S3 的元數(shù)據(jù)規(guī)范,其中元數(shù)據(jù)的鍵名> 前會添加 x-amz-meta- 前綴。這是因為 MinIO 是一個兼容 Amazon S3 API 的對象存儲服務器,因此它采用了 Amazon > S3 的一些規(guī)范和約定。
Amazon S3 使用 x-amz-meta- 前綴來標識用戶自定義的元數(shù)據(jù),以便與 Amazon S3 內(nèi)部使用的標準元數(shù)據(jù)進行區(qū)> 分。這樣可以確保用戶自定義的元數(shù)據(jù)不會與 S3 內(nèi)部使用的元數(shù)據(jù)沖突。這也是為了保持兼容性,使 MinIO 用戶可以> 使用與 Amazon S3 相同的元數(shù)據(jù)命名約定。
因此,在 MinIO 中設置自定義元數(shù)據(jù)時,不需要手動添加 x-amz-meta- 前綴,MinIO 會自動處理這個前綴,確保它符合 Amazon S3 的規(guī)范。當你從對象中檢索元數(shù)據(jù)時,MinIO 也會自動解析并返回合適的鍵名,不包含前綴。
總之,這個前綴是 MinIO 為了兼容 Amazon S3 API,保持統(tǒng)一性而引入的。

請注意,上述示例僅為基本示例,用于展示如何在Spring Boot中集成MinIO。您可以根據(jù)您的實際需求進行更多的配置和操作。確保替換示例中的"your-access-key"、“your-secret-key”、"your-bucket-name"和其他參數(shù)為您自己的值。

最后,不要忘記在您的MinIO服務器上創(chuàng)建對應的存儲桶(Bucket),以及設置正確的訪問權限。文章來源地址http://www.zghlxwxcb.cn/news/detail-685183.html

到了這里,關于在 Spring Boot 中集成 MinIO 對象存儲的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • minio + linux + docker + spring boot實現(xiàn)文件上傳與下載

    minio + linux + docker + spring boot實現(xiàn)文件上傳與下載

    檢查linux內(nèi)核,必須是3.10以上 安裝docker 啟動docker 搜索鏡像 拉取鏡像 啟動minio -p: 指定端口映射,格式為:主機端口:容器端口 (這里注意要映射兩個,否則API會訪問不到) -e “MINIO_ROOT_USER=vinci” minio用戶名; -e MINIO_SECRET_KEY=123456 minio 密碼 -d: 后臺運行容器,并返回容器ID; -

    2024年02月07日
    瀏覽(28)
  • Spring Boot整合Minio實現(xiàn)上傳憑證、分片上傳、秒傳和斷點續(xù)傳

    Spring Boot整合Minio后,前端的文件上傳有兩種方式: 文件上傳到后端,由后端保存到Minio 這種方式好處是完全由后端集中管理,可以很好的做到、身份驗證、權限控制、文件與處理等,并且可以做一些額外的業(yè)務邏輯,比如生成縮略圖、提取元數(shù)據(jù)等。 缺點也很明顯: 延遲時

    2024年02月04日
    瀏覽(26)
  • 使用Spring Gateway為對象存儲系統(tǒng)MinIo和kkFileView文檔預覽增加登錄驗證

    使用Spring Gateway為對象存儲系統(tǒng)MinIo和kkFileView文檔預覽增加登錄驗證

    官網(wǎng)介紹:kkFileView為文件文檔在線預覽解決方案,該項目使用流行的spring boot搭建,易上手和部署,基本支持主流辦公文檔的在線預覽,如doc,docx,xls,xlsx,ppt,pptx,pdf,txt,zip,rar,圖片,視頻,音頻等等。 前一文章《開源對象存儲系統(tǒng)MinIo部署配置與SpringBoot客戶端整合訪問》已經(jīng)介紹

    2024年02月09日
    瀏覽(22)
  • 在Spring Boot框架中集成 Spring Security

    技術介紹 SpringSecurity的核心功能: SpringSecurity特點: 具體實現(xiàn) 1、集成依賴 2、修改spring security 實現(xiàn)service.impl.UserDetailsServiceImpl類 代碼1具體解釋 代碼2具體解釋 實現(xiàn)config.SecurityConfig類 代碼具體解釋 總結 Spring Security是一個基于Spring框架的安全性框架,它提供了一系列的安全性

    2024年02月14日
    瀏覽(30)
  • Spring Boot項目中集成Apollo

    要在Spring Boot項目中集成Apollo,你可以按照以下步驟進行操作: 步驟1:添加Apollo依賴 在你的Spring Boot項目的pom.xml文件中添加Apollo依賴: 步驟2:配置Apollo連接信息 在Spring Boot項目的配置文件(如application.properties或application.yml)中添加Apollo相關的連接信息,例如: 步驟3:創(chuàng)建

    2024年02月08日
    瀏覽(16)
  • 如何在Spring Boot中集成RabbitMQ

    如何在Spring Boot中集成RabbitMQ

    在現(xiàn)代微服務架構中,消息隊列(如RabbitMQ)扮演了關鍵的角色,它不僅能夠提供高效的消息傳遞機制,還能解耦服務間的通信。本文將介紹如何在Spring Boot項目中集成RabbitMQ,實現(xiàn)生產(chǎn)者和消費者的基本配置。 首先,在你的Spring Boot項目的pom.xml中添加spring-boot-starter-amqp依賴:

    2024年02月04日
    瀏覽(18)
  • 如何在 Spring Boot 中集成日志框架 SLF4J、Log4j

    如何在 Spring Boot 中集成日志框架 SLF4J、Log4j

    筆者的操作環(huán)境: Spring Cloud Alibaba:2022.0.0.0-RC2 Spring Cloud:2022.0.0 Spring Boot:3.0.2 Nacos 2.2.3 Maven 3.8.3 JDK 17.0.7 IntelliJ IDEA 2022.3.1 (Ultimate Edition) 因為 Spring Boot 已經(jīng)內(nèi)置了 Logback,所以需要先將 Logback 移除。移除的方法是在 Spring Boot 依賴包中移除 Logback。 比如就像這樣: 【踩坑提

    2024年02月13日
    瀏覽(25)
  • Spring Boot中集成各種日志框架Logback、Log4j2和Java Util Logging

    Spring Boot中集成各種日志框架Logback、Log4j2和Java Util Logging

    Spring Boot支持多種日志框架,包括Logback、Log4j2和Java Util Logging(JUL)。在Spring Boot中,可以通過簡單的配置來集成這些熱門的日志框架。 下面將詳細說明如何集成Logback、Log4j2和Java Util Logging,并提供相應的源代碼示例。 集成Logback: Logback是Spring Boot默認的日志框架,它提供了高

    2024年02月05日
    瀏覽(53)
  • Minio 踩坑 Docker 使用 免費開源對象存儲 MINIO 包會安裝

    Minio 踩坑 Docker 使用 免費開源對象存儲 MINIO 包會安裝

    minio簡介: 對象存儲人工智能數(shù)據(jù)基礎設施 MinIO 是一種高性能、S3 兼容的對象存儲。它是為大規(guī)模 AI/ML、數(shù)據(jù)湖和數(shù)據(jù)庫工作負載。它是軟件定義的并在任何云或本地基礎設施上運行。MinIO 具有雙重許可根據(jù)開源 GNU AGPL v3 和商業(yè)企業(yè)許可證。 之前使用的是官方的minio/minio,

    2024年04月14日
    瀏覽(37)
  • 高性能分布式對象存儲——MinIO實戰(zhàn)操作(MinIO擴容)

    高性能分布式對象存儲——MinIO實戰(zhàn)操作(MinIO擴容)

    MinIO的基礎概念和環(huán)境部署可以參考我之前的文章:高性能分布式對象存儲——MinIO(環(huán)境部署) 官方文檔:https://docs.min.io/docs/minio-admin-complete-guide.html MinIO Client (mc) 為 UNIX 命令(如 ls、cat、cp、mirror、diff、find 等)提供了現(xiàn)代替代方案。它支持文件系統(tǒng)和兼容 Amazon S3 的云存

    2023年04月26日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包