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

SpringBoot使用minio進(jìn)行文件管理的流程步驟

 更新時(shí)間:2025年01月07日 10:01:16   作者:頭dd先生  
MinIO 是一個(gè)高性能的對(duì)象存儲(chǔ)系統(tǒng),兼容 Amazon S3 API,該軟件設(shè)計(jì)用于處理非結(jié)構(gòu)化數(shù)據(jù),如圖片、視頻、日志文件以及備份數(shù)據(jù)等,本文給大家介紹了SpringBoot使用minio進(jìn)行文件管理的流程步驟,需要的朋友可以參考下

springboot+docker desktop使用minio進(jìn)行文件管理,記錄一下。

這里我用docker desktop去安裝minio,如果本地已經(jīng)裝好minio的話可以跳過(guò)前面的步驟。

安裝docker的步驟我就省略了。

一、拉取minio鏡像

打開(kāi)命令行執(zhí)行拉去命令:

docker pull quay.io/minio/minio

執(zhí)行完后我們可以通過(guò)命令去查看鏡像:

docker images

或者docker desktop查看:

二、創(chuàng)建配置文件和上傳文件的目錄

在D盤(pán)創(chuàng)建兩個(gè)目錄:

D:\DockerData\minio\config

D:\DockerData\minio\data

三、啟動(dòng)容器

docker run -p 9000:9000 -p 9090:9090 --name minio-server -d --restart=always -e "MINIO_ACCESS_KEY=admin2025" -e "MINIO_SECRET_KEY=admin2025" -v D:\DockerData\minio\data:/data -v D:\DockerData\minio\config:/root/.minio quay.io/minio/minio server /data --console-address ":9090" -address ":9000"

這樣就啟動(dòng)好了,咱們也可以通過(guò) 命令去查看啟動(dòng)的容器:

docker ps

或者通過(guò)可視化docker去查看:

上面那段命令的解釋?zhuān)?/p>

  • docker run: 這是啟動(dòng)新容器的命令。
  • -p 9000:9000: 這個(gè)選項(xiàng)將宿主機(jī)的端口9000映射到容器的端口9000。MinIO的服務(wù)端API將通過(guò)這個(gè)端口提供訪問(wèn)。
  • -p 9090:9090: 同樣,這個(gè)選項(xiàng)將宿主機(jī)的端口9090映射到容器的端口9090。MinIO的Web管理界面將通過(guò)這個(gè)端口提供訪問(wèn)。
  • --name minio-server: 這個(gè)選項(xiàng)為容器指定了一個(gè)名稱(chēng),這里命名為minio-server。
  • -d: 這個(gè)選項(xiàng)告訴Docker在后臺(tái)運(yùn)行容器,即以守護(hù)態(tài)運(yùn)行。
  • --restart=always: 這個(gè)選項(xiàng)指定了容器的重啟策略。always意味著容器總是會(huì)在退出時(shí)重啟,這適用于希望容器持續(xù)運(yùn)行的服務(wù)。
  • -e "MINIO_ACCESS_KEY=admin2025": 這個(gè)選項(xiàng)設(shè)置了一個(gè)環(huán)境變量MINIO_ACCESS_KEY,它是MinIO的訪問(wèn)密鑰,用于身份驗(yàn)證。這里設(shè)置為admin2025。
  • -e "MINIO_SECRET_KEY=admin2025": 同樣,這個(gè)選項(xiàng)設(shè)置了一個(gè)環(huán)境變量MINIO_SECRET_KEY,它是MinIO的密鑰,也用于身份驗(yàn)證。這里也設(shè)置為admin2025。
  • -v D:\DockerData\minio\data:/data: 這個(gè)選項(xiàng)將宿主機(jī)的本地路徑D:\DockerData\minio\data掛載到容器的/data路徑。這是MinIO存儲(chǔ)數(shù)據(jù)的目錄。
  • -v D:\DockerData\minio\config:/root/.minio: 這個(gè)選項(xiàng)將宿主機(jī)的本地路徑D:\DockerData\minio\config掛載到容器的/root/.minio路徑。這是MinIO存儲(chǔ)配置文件的目錄。
  • quay.io/minio/minio: 這是MinIO服務(wù)器鏡像的名稱(chēng),表示容器將從這個(gè)鏡像啟動(dòng)。
  • server /data --console-address ":9090" -address ":9000": 這是傳遞給MinIO服務(wù)器鏡像的命令參數(shù)。server /data告訴MinIO使用/data目錄作為存儲(chǔ)位置。--console-address ":9090"指定了MinIO控制臺(tái)(Web界面)的地址和端口。-address ":9000"指定了MinIO API服務(wù)器的地址和端口。

四、瀏覽器登錄 minio

輸入網(wǎng)址:http://127.0.0.1:9090/login

 使用剛剛設(shè)置的賬號(hào)密碼登錄:admin2025       admin2025

到這里minio就啟動(dòng)好了

五、創(chuàng)建用戶(hù),組,bucket.... 

創(chuàng)建admin用戶(hù):

創(chuàng)建admin組:

創(chuàng)建accessKey和secretKe:

創(chuàng)建bucket:

六、使用java進(jìn)行文件上傳下載刪除操作

0)導(dǎo)入依賴(lài)

Maven

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

Gradle

dependencies {
    implementation("io.minio:minio:JAVAVERSION")
}

1)配置yml

# minio配置
minio:
  endpoint: http://127.0.0.1:9000
  username: admin
  password: cepc_2025@admin
  bucketName: cepc

2)創(chuàng)建配置類(lèi)

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
 
@Data
@Component
@ConfigurationProperties(prefix = "minio")
public class MinioProperties {
 
    private String endpoint;
 
    private String username;
 
    private String password;
 
    private String bucketName;
 
}

3)創(chuàng)建工具類(lèi)

 
@Slf4j
@Component
public class UploadUtil {
 
    @Autowired
    private MinioProperties minioProperties;
 
    /**
     * 上傳文件到minio并重命名
     *
     * @param multipartFile 上傳文件
     * @param dirPath       文件上傳路徑(例如:images/pdf)
     * @param newFileName   新文件名
     * @return eTag
     * @throws Exception
     */
    public String uploadMinioRename(MultipartFile multipartFile, String dirPath, String newFileName) throws Exception {
        MinioClient minioClient =
                MinioClient.builder()
                        .endpoint(minioProperties.getEndpoint())
                        .credentials(minioProperties.getUsername(), minioProperties.getPassword())
                        .build();
 
 
        // 完整的對(duì)象名稱(chēng),包括目錄路徑和文件名
        String objectName = dirPath + "/" + newFileName;
 
        // 上傳文件
        try (InputStream is = multipartFile.getInputStream()) {
            minioClient.putObject(
                    PutObjectArgs.builder().bucket(minioProperties.getBucketName()).object(objectName).stream(
                                    is, multipartFile.getSize(), -1)
                            .contentType(multipartFile.getContentType())
                            .build());
        } catch (MinioException e) {
            log.error("Error occurred: {}", e);
            throw new Exception("Error occurred while uploading the file.", e);
        }
 
        return objectName;
    }
 
    /**
     * 刪除MinIO上的文件
     *
     * @param objectName 要?jiǎng)h除的文件對(duì)象名稱(chēng)(路徑)
     * @throws Exception 如果刪除過(guò)程中發(fā)生錯(cuò)誤
     */
    public void deleteMinioObject(String objectName) throws Exception {
        MinioClient minioClient =
                MinioClient.builder()
                        .endpoint(minioProperties.getEndpoint())
                        .credentials(minioProperties.getUsername(), minioProperties.getPassword())
                        .build();
        try {
            // 刪除對(duì)象
            minioClient.removeObject(
                    RemoveObjectArgs.builder()
                            .bucket(minioProperties.getBucketName())
                            .object(objectName)
                            .build());
        } catch (MinioException e) {
            log.error("Error occurred: {}", e);
            throw new Exception("Error occurred while deleting the file.", e);
        }
    }
 
    /**
     * 下載MinIO上的文件
     *
     * @param path 文件對(duì)象路徑
     * @param fileSuffix 文件后綴
     * @throws Exception
     */
    public void downloadMinioObject(String path, HttpServletResponse response, String fileSuffix) throws Exception {
        MinioClient minioClient =
                MinioClient.builder()
                        .endpoint(minioProperties.getEndpoint())
                        .credentials(minioProperties.getUsername(), minioProperties.getPassword())
                        .build();
        try {
            // 設(shè)置響應(yīng)頭和內(nèi)容類(lèi)型
            response.setContentType("application/octet-stream");
            response.setHeader("Content-Disposition", "attachment; filename=\"" + "response."+fileSuffix + "\"");
 
            // 從MinIO獲取文件
            try (InputStream is = minioClient.getObject(
                    GetObjectArgs.builder()
                            .bucket(minioProperties.getBucketName())
                            .object(path)
                            .build());
                 OutputStream os = response.getOutputStream()) {
 
                byte[] buffer = new byte[1024];
                int bytesRead;
                while ((bytesRead = is.read(buffer)) != -1) {
                    os.write(buffer, 0, bytesRead);
                }
                os.flush();
            }
        } catch (Exception e) {
            // 處理異常,設(shè)置錯(cuò)誤狀態(tài)碼
            response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
            // 可以選擇記錄日志或者發(fā)送錯(cuò)誤消息
            e.printStackTrace();
        }
    }
 
 
 
 
}

4)POSTMAN測(cè)試接口

這邊的話controller,service等等我就不貼出來(lái)了,根據(jù)業(yè)務(wù)邏輯調(diào)用工具類(lèi)里面對(duì)應(yīng)的方法即可

上傳:

成功上傳

以上就是SpringBoot使用minio進(jìn)行文件管理的流程步驟的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot minio文件管理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java雙冒號(hào)(::)運(yùn)算符使用詳解

    Java雙冒號(hào)(::)運(yùn)算符使用詳解

    之前沒(méi)用過(guò)::這個(gè)東西,今天看flink的時(shí)候發(fā)現(xiàn)官網(wǎng)有個(gè)例子用到了這個(gè)符號(hào),本文就詳細(xì)的來(lái)介紹一下Java雙冒號(hào)(::)運(yùn)算符使用詳解,感興趣的可以了解一下
    2021-09-09
  • SpringBoot-JWT生成Token和攔截器的使用(訪問(wèn)受限資源)

    SpringBoot-JWT生成Token和攔截器的使用(訪問(wèn)受限資源)

    本文主要介紹了SpringBoot-JWT生成Token和攔截器的使用(訪問(wèn)受限資源),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • Mybatis中Mapper標(biāo)簽總結(jié)大全

    Mybatis中Mapper標(biāo)簽總結(jié)大全

    這篇文章主要介紹了Mybatis中Mapper標(biāo)簽總結(jié)大全,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Mybatis-Plus中IdType.AUTO局部配置不生效的問(wèn)題解決

    Mybatis-Plus中IdType.AUTO局部配置不生效的問(wèn)題解決

    本文主要介紹了Mybatis-Plus中IdType.AUTO局部配置不生效的問(wèn)題解決,數(shù)據(jù)庫(kù)插入數(shù)據(jù)時(shí),id的默認(rèn)生成方式還是雪花算法,局部配置沒(méi)有生效,下面就來(lái)解決一下,感興趣的可以了解一下
    2023-09-09
  • Nacos框架服務(wù)注冊(cè)實(shí)現(xiàn)流程

    Nacos框架服務(wù)注冊(cè)實(shí)現(xiàn)流程

    這篇文章主要介紹了SpringCloud服務(wù)注冊(cè)之nacos實(shí)現(xiàn)過(guò)程,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • Java8新特性之方法引用的實(shí)踐指南

    Java8新特性之方法引用的實(shí)踐指南

    這篇文章主要給大家介紹了關(guān)于Java8新特性之方法引用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • MybatisPlus?構(gòu)造器wrapper的使用與原理解析

    MybatisPlus?構(gòu)造器wrapper的使用與原理解析

    本次我們介紹了MybatisPlus?構(gòu)造器wrapper的使用方式及其易錯(cuò)點(diǎn),同時(shí)也針對(duì)其運(yùn)行的原理進(jìn)行了解釋,只有深刻理解了它的原理,我們才能更靈活的使用,并且更快的排查出問(wèn)題,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • jenkins+Maven從SVN上構(gòu)建項(xiàng)目的方法

    jenkins+Maven從SVN上構(gòu)建項(xiàng)目的方法

    這篇文章主要介紹了jenkins+Maven從SVN上構(gòu)建項(xiàng)目,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Retrofit+Rxjava下載文件進(jìn)度的實(shí)現(xiàn)

    Retrofit+Rxjava下載文件進(jìn)度的實(shí)現(xiàn)

    這篇文章主要介紹了Retrofit+Rxjava下載文件進(jìn)度的實(shí)現(xiàn),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-11-11
  • 利用Java和c語(yǔ)言寫(xiě)一個(gè)計(jì)算器

    利用Java和c語(yǔ)言寫(xiě)一個(gè)計(jì)算器

    這篇文章我們就來(lái)分享如何利用Java和c語(yǔ)言來(lái)寫(xiě)一個(gè)計(jì)算器,文章附有代碼詳細(xì)說(shuō)明,感興趣得小伙伴可以參考下面文章得具體內(nèi)容
    2021-10-10

最新評(píng)論