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

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

 更新時間:2025年01月07日 10:01:16   作者:頭dd先生  
MinIO 是一個高性能的對象存儲系統(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的話可以跳過前面的步驟。

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

一、拉取minio鏡像

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

docker pull quay.io/minio/minio

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

docker images

或者docker desktop查看:

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

在D盤創(chuàng)建兩個目錄:

D:\DockerData\minio\config

D:\DockerData\minio\data

三、啟動容器

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"

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

docker ps

或者通過可視化docker去查看:

上面那段命令的解釋:

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

四、瀏覽器登錄 minio

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

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

到這里minio就啟動好了

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

創(chuàng)建admin用戶:

創(chuàng)建admin組:

創(chuàng)建accessKey和secretKe:

創(chuàng)建bucket:

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

0)導(dǎo)入依賴

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)建配置類

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)建工具類

 
@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();
 
 
        // 完整的對象名稱,包括目錄路徑和文件名
        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 要刪除的文件對象名稱(路徑)
     * @throws Exception 如果刪除過程中發(fā)生錯誤
     */
    public void deleteMinioObject(String objectName) throws Exception {
        MinioClient minioClient =
                MinioClient.builder()
                        .endpoint(minioProperties.getEndpoint())
                        .credentials(minioProperties.getUsername(), minioProperties.getPassword())
                        .build();
        try {
            // 刪除對象
            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 文件對象路徑
     * @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)容類型
            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è)置錯誤狀態(tài)碼
            response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
            // 可以選擇記錄日志或者發(fā)送錯誤消息
            e.printStackTrace();
        }
    }
 
 
 
 
}

4)POSTMAN測試接口

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

上傳:

成功上傳

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

相關(guān)文章

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

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

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

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

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

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

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

    Mybatis-Plus中IdType.AUTO局部配置不生效的問題解決

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

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

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

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

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

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

    本次我們介紹了MybatisPlus?構(gòu)造器wrapper的使用方式及其易錯點(diǎn),同時也針對其運(yùn)行的原理進(jì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ì),對大家的學(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),非常不錯,具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-11-11
  • 利用Java和c語言寫一個計(jì)算器

    利用Java和c語言寫一個計(jì)算器

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

最新評論