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

SpringBoot 對(duì)象存儲(chǔ) MinIO的詳細(xì)過程

 更新時(shí)間:2023年07月18日 09:39:19   作者:llp1110  
MinIO 是一個(gè)基于 Go 實(shí)現(xiàn)的高性能、兼容 S3 協(xié)議的對(duì)象存儲(chǔ),它適合存儲(chǔ)海量的非結(jié)構(gòu)化的數(shù)據(jù),這篇文章主要介紹了SpringBoot 對(duì)象存儲(chǔ) MinIO,需要的朋友可以參考下

SpringBoot 對(duì)象存儲(chǔ) MinIO

1.MinIO簡(jiǎn)介

MinIO 是一個(gè)基于 Go 實(shí)現(xiàn)的高性能、兼容 S3 協(xié)議的對(duì)象存儲(chǔ)。它采用 GNU AGPL v3 開源協(xié)議,項(xiàng)目地址是 https://github.com/minio/minio,官網(wǎng)是 https://min.io。

它適合存儲(chǔ)海量的非結(jié)構(gòu)化的數(shù)據(jù),例如說圖片、音頻、視頻等常見文件,備份數(shù)據(jù)、容器、虛擬機(jī)鏡像等等,小到 1 KB,大到 5 TB 都可以支持。

國(guó)內(nèi)阿里巴巴、騰訊、百度、華為、中國(guó)移動(dòng)、中國(guó)聯(lián)通等企業(yè)在使用 MinIO,甚至不少商業(yè)公司二次開發(fā) MinIO 來提供商業(yè)化的云存儲(chǔ)產(chǎn)品。

疑問:為什么越來越少使用 FastDFS 實(shí)現(xiàn)文件存儲(chǔ)服務(wù)呢?

部署運(yùn)維復(fù)雜、無官方文檔、缺乏長(zhǎng)期維護(hù)的團(tuán)隊(duì)、性能較差、未提供 Docker & Kubernetes 集成方案等等原因。

2. MinIO Server 安裝

由于 MinIO 是 Go 寫的,所以就一個(gè)運(yùn)行程序,因此安裝部署 MinIO 就非常簡(jiǎn)單。

文檔 https://min.io/download

2.1 Linux

## 國(guó)外資源,龜速下載
## /usr/local/minio 存儲(chǔ)目錄;--console-address 是 UI 界面的端口
wget https://dl.min.io/server/minio/release/linux-amd64/minio 
chmod +x minio
MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=admin123 ./minio server /usr/local/minio --console-address ":9001" 

2.2Docker

Linux 或 MacOS:

cd /usr/local/mkdir minio

vi dockercompose.yml創(chuàng)建dockercompose.yml文件,填寫內(nèi)容如下

version: '3'
services:
  minio:
    image: minio/minio
    container_name: myminio
    ports:
      - "9001:9000"
    volumes:
      - /usr/local/minio/data:/data
      - /usr/local/minio/config:/root/.minio
    environment:
      MINIO_ROOT_USER: "admin"
      MINIO_ROOT_PASSWORD: "admin123"
    command: server /data
    restart: always

在上面的示例中,

1.我們定義了一個(gè)名為minio的服務(wù),使用minio/minio鏡像。

2.我們將容器的9000端口映射到主機(jī)的9000端口,

具體來說,9001:9000 的格式是 <主機(jī)端口>:<容器端口>。通過這樣的端口映射,可以在主機(jī)上的 9000 端口訪問容器內(nèi)的服務(wù)或應(yīng)用程序。以便能夠通過主機(jī)訪問MinIO。

3.數(shù)據(jù)目錄./data將與容器的/data目錄進(jìn)行掛載,這樣數(shù)據(jù)可以在容器和主機(jī)之間共享。

4.environment部分定義了MinIO的環(huán)境變量。在這個(gè)示例中,我們?cè)O(shè)置了MINIO_ROOT_USERMINIO_ROOT_PASSWORD來指定MinIO的根用戶的用戶名和密碼。你可以根據(jù)需要進(jìn)行更改。

5.最后,command部分指定了MinIO容器啟動(dòng)時(shí)運(yùn)行的命令,這里是server /data,它告訴MinIO在/data目錄下存儲(chǔ)數(shù)據(jù)。

將上述內(nèi)容保存到名為docker-compose.yml的文件中,并在該文件所在的目錄中運(yùn)行以下命令啟動(dòng)MinIO容器:

# 后臺(tái)啟動(dòng)
docker-compose up -d
# docker-compose logs  yml里面的服務(wù)id     # 查看容器輸出日志
docker-compose logs minio

2.3 訪問 UI 界面

使用瀏覽器訪問 http://127.0.0.1:9001 地址,訪問 MinIO 內(nèi)置的 UI 界面。

輸入賬號(hào) admin,密碼 admin123進(jìn)行登錄,成功進(jìn)入首頁(yè)。

2.4 新建存儲(chǔ)桶

點(diǎn)擊 [Create Bucket] 按鈕,新建一個(gè) Bucket 存儲(chǔ)桶,用于稍后文件的上傳。

2.5 添加 readonly 訪問規(guī)則

默認(rèn)配置下,訪問存儲(chǔ)桶是需要請(qǐng)求授權(quán)的。但是在實(shí)際場(chǎng)景下,我們往往希望允許直接訪問,此時(shí)就需要添加一條 readonly 訪問規(guī)則。

① 點(diǎn)擊右上角的 [Configure Bucket] 設(shè)置圖標(biāo),然后選擇 [Access Rules] 菜單。

2.6 上傳文件

點(diǎn)擊 [Upload] 按鈕,點(diǎn)擊 [Upload File] 選項(xiàng),選擇一個(gè)圖片上傳。

2.7 訪問文件

文件的訪問地址的格式為 <http://127.0.0.1:9000/{bucket}/{name}>,注意是 9000 端口。

我們剛上傳的文件 {bucket} 是 llp,{name} 是 123.png,所以最終的訪問路徑是 http://127.0.0.1:9000/llp/123.png。

3.Springboot整合minio

3.1引入依賴

<dependencies>
		<!-- 實(shí)現(xiàn)對(duì) Spring MVC 的自動(dòng)化配置 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- MinIO 客戶端 -->
		<dependency>
			<groupId>io.minio</groupId>
			<artifactId>minio</artifactId>
			<version>8.2.2</version>
		</dependency>
	</dependencies>

3.2 Minio配置類

import io.minio.MinioClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MinIOConfiguration {
    /**
     * Minio 配置
     * @return
     */
    @Bean
    public MinioClient minioClient() {
        // 創(chuàng)建 MinioClient 客戶端
        return MinioClient.builder()
                .endpoint(MinioProperties.ENDPOINT)
                .credentials(MinioProperties.ACCESS_KEY, MinioProperties.SECRET_KEY)
                .build();
    }
}

application.yml

minio:
  # minio訪問地址
  endpoint: http://192.168.233.202:9000
  # 創(chuàng)建的桶名
  bucket: llp
  # minio賬戶名
  accessKey: admin
  # minio賬戶密碼
  secretKey: admin123
spring:
  servlet:
    # 文件上傳相關(guān)配置項(xiàng)
    multipart:
      max-file-size: 16MB # 單個(gè)文件大小
      max-request-size: 32MB # 設(shè)置總上傳的文件大小

MinioProperties讀取yml配置

import lombok.Data;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@Component
@ConfigurationProperties(value = "minio")
public class MinioProperties implements InitializingBean {
    private String endpoint;
    private String bucket;
    private String accessKey;
    private String secretKey;
    public static String ENDPOINT;
    public static String BUCKET;
    public static String ACCESS_KEY;
    public static String SECRET_KEY;
    @Override
    public void afterPropertiesSet() throws Exception {
        ENDPOINT = endpoint;
        BUCKET = bucket;
        SECRET_KEY = secretKey;
        ACCESS_KEY = accessKey;
    }
}

測(cè)試類

@RestController
@RequestMapping("/file")
public class FileController {
    @Resource
    private MinioClient minioClient;
    /**
     * 上傳文件
     */
    @PostMapping("/upload")
    public String upload(@RequestParam("file") MultipartFile file) throws Exception {
        // 上傳
        String path = UUID.randomUUID().toString(); // 文件名,使用 UUID 隨機(jī)
        minioClient.putObject(PutObjectArgs.builder()
                .bucket(MinioProperties.BUCKET) // 存儲(chǔ)桶
                .object(path) // 文件名
                .stream(file.getInputStream(), file.getSize(), -1) // 文件內(nèi)容
                .contentType(file.getContentType()) // 文件類型
                .build());
        // 拼接路徑
        return String.format("%s/%s/%s", MinioProperties.ENDPOINT, MinioProperties.BUCKET, path);
    }
    /**
     * 刪除文件
     */
    @DeleteMapping("/delete")
    public String delete(@RequestParam("path") String path) throws Exception {
        minioClient.removeObject(RemoveObjectArgs.builder()
                .bucket(MinioProperties.BUCKET) // 存儲(chǔ)桶
                .object(path) // 文件名
                .build());
        return "success";
    }
}

4.測(cè)試

文件上傳測(cè)試

上傳成功后,我們獲得了文件的訪問 URL 地址,可以使用瀏覽器直接訪問。

http://192.168.233.202:9000/llp/8028e9c9-8b22-4a57-bcdc-74eb96a585da

同時(shí)在minio后臺(tái)也可以看到上傳的文件

文件刪除測(cè)試

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

相關(guān)文章

  • Java中LocalCache本地緩存實(shí)現(xiàn)代碼

    Java中LocalCache本地緩存實(shí)現(xiàn)代碼

    本篇文章主要介紹了Java中LocalCache本地緩存實(shí)現(xiàn)代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • Spring Boot集成Redis實(shí)現(xiàn)緩存機(jī)制(從零開始學(xué)Spring Boot)

    Spring Boot集成Redis實(shí)現(xiàn)緩存機(jī)制(從零開始學(xué)Spring Boot)

    這篇文章主要介紹了Spring Boot集成Redis實(shí)現(xiàn)緩存機(jī)制(從零開始學(xué)Spring Boot),需要的朋友可以參考下
    2017-04-04
  • 23種設(shè)計(jì)模式(7) java代理模式

    23種設(shè)計(jì)模式(7) java代理模式

    這篇文章主要為大家詳細(xì)介紹了23種設(shè)計(jì)模式之java代理模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Java線程中synchronized和volatile關(guān)鍵字的區(qū)別詳解

    Java線程中synchronized和volatile關(guān)鍵字的區(qū)別詳解

    這篇文章主要介紹了Java線程中synchronized和volatile關(guān)鍵字的區(qū)別詳解,synchronzied既能夠保障可見性,又能保證原子性,而volatile只能保證可見性,無法保證原子性,volatile不需要加鎖,比synchronized更輕量級(jí),不會(huì)阻塞線程,需要的朋友可以參考下
    2024-01-01
  • Java tomcat中的類加載器和安全機(jī)制你了解嗎

    Java tomcat中的類加載器和安全機(jī)制你了解嗎

    這篇文章主要介紹了Tomcat 類加載器的實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-09-09
  • Java中讓界面內(nèi)的時(shí)間及時(shí)更新示例代碼

    Java中讓界面內(nèi)的時(shí)間及時(shí)更新示例代碼

    這篇文章主要給大家介紹了關(guān)于Java中讓界面內(nèi)的時(shí)間及時(shí)更新的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Spring如何基于注解配置使用ehcache

    Spring如何基于注解配置使用ehcache

    這篇文章主要介紹了Spring如何基于注解配置使用ehcache,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Object.wait()與Object.notify()的用法詳細(xì)解析

    Object.wait()與Object.notify()的用法詳細(xì)解析

    以下是對(duì)java中Object.wait()與Object.notify()的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下
    2013-09-09
  • Java實(shí)現(xiàn)游戲抽獎(jiǎng)算法

    Java實(shí)現(xiàn)游戲抽獎(jiǎng)算法

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)游戲抽獎(jiǎng)算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • Spring?框架的?MethodInterceptor?簡(jiǎn)介及示例代碼

    Spring?框架的?MethodInterceptor?簡(jiǎn)介及示例代碼

    MethodInterceptor接口定義了一個(gè)方法Object?intercept(Object?obj,?Method?method,?Object[]?args,?MethodProxy?proxy)?,該方法在代理對(duì)象的方法被調(diào)用時(shí)被觸發(fā),這篇文章主要介紹了Spring?框架的?MethodInterceptor?簡(jiǎn)介及示例代碼,需要的朋友可以參考下
    2023-09-09

最新評(píng)論

柞水县| 怀仁县| 涞水县| 辉南县| 淳化县| 定远县| 当雄县| 时尚| 洮南市| 杭锦旗| 灵武市| 凤山县| 吴堡县| 噶尔县| 科技| 钟山县| 余庆县| 淳化县| 新郑市| 宿迁市| 肇东市| 鹤庆县| 仙游县| 鲜城| 太仆寺旗| 武功县| 辉县市| 黔西县| 新干县| 曲麻莱县| 郧西县| 新河县| 若羌县| 安平县| 昭通市| 简阳市| 如皋市| 同德县| 吉木萨尔县| 宝清县| 旬阳县|