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

Minio安裝及整合SpringBoot

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

一. MinIO概述

官網地址:https://minio.org.cn

MinIO是一款基于Apache License v2.0開源協(xié)議的分布式文件系統(tǒng)(或者叫對象存儲服務),可以做為云存儲的解決方案用來保存海量的圖片、視頻、文檔等。由于采用Golang實現(xiàn),服務端可以工作在Windows、Linux、 OS X和FreeBSD上。配置簡單,基本是復制可執(zhí)行程序,單行命令就可以運行起來。

MinIO兼容亞馬遜S3(Simple Storage Service,簡單存儲服務)云存儲服務接口,非常適合于存儲大容量非結構化的數(shù)據,例如圖片、視頻、日志文件、備份數(shù)據和容器/虛擬機鏡像等,而且每個對象文件可以是任意大小,從幾kb到最大5T不等。

?MinIO特點:

1. 高性能:作為高性能對象存儲,在標準硬件條件下它能達到55GB/s的讀、35GB/s的寫速率;
2. 可擴容:不同MinIO集群可以組成聯(lián)邦,并形成一個全局的命名空間,并跨越多個數(shù)據中心;
3. SDK支持: 基于Minio輕量的特點,它得到類似Java、Python或Go等語言的sdk支持;
4. 支持糾刪碼:MinIO使用糾刪碼、Checksum來防止硬件錯誤和靜默數(shù)據污染。在最高冗余度配? 置下,即使丟失1/2的磁盤也能恢復數(shù)據;

MinIO基本概念:

  • bucket(桶) :類似文件系統(tǒng)的目錄(文件夾);
  • Object : 類似文件系統(tǒng)的文件;
  • Keys :類似文件名;
  • MINIO_ACCESS_KEY:訪問key,類似賬號;
  • MINIO_SECRET_KEY:秘鑰,類似密碼。
二. Dokcer安裝Minio
2.1 創(chuàng)建文件夾

在home/docker/minio文件夾下創(chuàng)建兩個文件夾,分別是data、config,用于掛載容器中的數(shù)據卷。

mkdir home/docker/minio/data
mkdir home/docker/minio/config
2.1 拉取鏡像
docker pull minio/minio
2.3 啟動容器
docker run -p 9000:9000 -p 9001:9001\
 --name minio \
 -d --restart=always \
 -e "MINIO_ROOT_USER=minio" \
 -e "MINIO_ROOT_PASSWORD=minio123" \
 -v /home/docker/minio/data:/data \
-v /home/docker/minio/config \
 minio/minio server \
 /data --console-address ":9001" -address ":9000"

參數(shù)說明

  • -p:MinIO 服務會暴露 9000 端口作為API端口,9001 端口為可視化管理頁面端口
  • -v :掛載數(shù)據卷,將 minio 容器內存儲的數(shù)據、配置文件映射到宿主機
  • -e MINIO_ROOT_USER:設置 root 用戶名
  • -e MINIO_ROOT_PASSWORD:設置 root 的密碼,長度至少 8 位
  • --console-address:指定可視化界面端口
  • -address:指定服務端口

記得開放安全組!

2.4 查看日志
docker logs minio容器id

通過以上命令查看 minio 日志,會輸出以下內容:

Minio安裝及整合SpringBoot,java,ide

我們可以通過日志中的Console地址來訪問可視化界面。

三.訪問Minio

Minio安裝及整合SpringBoot,java,ide

登錄成功后,可以創(chuàng)建桶

Minio安裝及整合SpringBoot,java,ide

Minio安裝及整合SpringBoot,java,ide?此時在桶列表會會出現(xiàn)剛剛創(chuàng)建的桶,點擊Manage,設置桶的訪問策略,修改為 Public 公共策略,這樣 minio 中的文件才能被外界訪問

Minio安裝及整合SpringBoot,java,ide

?并可以直接在桶中上傳文件。

四. 整合Springboot完成文件上傳
4.1創(chuàng)建springboot工程
4.2?導入相關依賴
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <!-- 必須要導入OKhttp的依賴 -->
    <dependency>
        <groupId>com.squareup.okhttp3</groupId>
        <artifactId>okhttp</artifactId>
        <version>4.8.1</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/io.minio/minio -->
    <dependency>
        <groupId>io.minio</groupId>
        <artifactId>minio</artifactId>
        <version>8.5.7</version>
    </dependency>

    <!--web-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!--lombok-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
</dependencies>
4.3 yaml中配置 Minio

在 yaml 中新增以下配置:

minio:
  accessKey: minio # 訪問Key
  secretKey: minio123 # 密鑰
  bucket: test 
  endpoint: http://xxx.x.x.x:9000 # ip:api端口
  readPath: http://xxx.x.x.x:9000 # ip:api端口
  servlet:
    multipart:
      # 單個上傳文件的最大值是200mb
      max-file-size: 200MB
      # 單次請求的最大值
      max-request-size: 200MB
4.4?編寫 MinIO屬性配置類
@Data
@Component
@ConfigurationProperties(prefix = "minio")  //自動注入屬性前綴為minio的配置
public class MinIOConfigProperties implements Serializable {

    private String accessKey; // 訪問key
    private String secretKey; // 秘鑰
    private String bucket;    // 桶
    private String endpoint;  // 地域節(jié)點
    private String readPath;  // 讀取路徑
}
4.5?編寫MinIO配置類,注冊MinioClient客戶端Bean實例
@Configuration
public class MinIOConfig {

    @Autowired
    private MinIOConfigProperties minIOConfigProperties;

    // 注冊MinIO實例
    @Bean
    public MinioClient buildMinioClient(){
        return MinioClient
                .builder()
                .credentials(minIOConfigProperties.getAccessKey(), minIOConfigProperties.getSecretKey())
                .endpoint(minIOConfigProperties.getEndpoint())
                .build();
    }
}
4.6?編寫操作minio相關業(yè)務接口
public interface FileStorageService {

    /**
     * 上傳圖片文件
     *
     * @param prefix      文件前綴
     * @param filename    文件名
     * @param inputStream 文件流
     * @return 文件全路徑
     */
    public String uploadImgFile(String prefix, String filename, InputStream inputStream);

    /**
     * 上傳html文件
     *
     * @param prefix      文件前綴
     * @param filename    文件名
     * @param inputStream 文件流
     * @return 文件全路徑
     */
    public String uploadHtmlFile(String prefix, String filename, InputStream inputStream);

    /**
     * 刪除文件
     *
     * @param pathUrl 文件全路徑
     */
    public void delete(String pathUrl);

    /**
     * 下載文件
     *
     * @param pathUrl 文件全路徑
     * @return
     */
    public byte[] downLoadFile(String pathUrl);

}

業(yè)務接口實現(xiàn)類:

@Service
public class MinIOFileStorageService implements FileStorageService {
    @Autowired
    MinioClient minioClient;

    @Autowired
    MinIOConfigProperties minIOConfigProperties;

    final static String separator = "/"; //文件夾分隔符

    /**
     * 構建文件的絕對路徑
     *
     * @param dirPath  文件路徑
     * @param filename 文件名  yyyy/mm/dd/file.jpg
     * @return /test
     */
    public String builderFilePath(String dirPath, String filename) {
        StringBuilder stringBuilder = new StringBuilder(50);
        if (!StringUtils.isEmpty(dirPath)) {
            stringBuilder.append(dirPath).append(separator);
        }
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
        String todayStr = sdf.format(new Date());
        stringBuilder.append(todayStr).append(separator);
        stringBuilder.append(filename);
        return stringBuilder.toString();
    }

    /**
     * 上傳圖片文件
     *
     * @param prefix      文件前綴
     * @param filename    文件名
     * @param inputStream 文件流
     * @return 文件全路徑
     */
    @Override
    public String uploadImgFile(String prefix, String filename, InputStream inputStream) {
        String filePath = builderFilePath(prefix, filename);
        try {
            PutObjectArgs putObjectArgs = PutObjectArgs.builder()
                    .object(filePath)
                    .contentType("image/jpg")
                    .bucket(minIOConfigProperties.getBucket()).stream(inputStream, inputStream.available(), -1)
                    .build();
            minioClient.putObject(putObjectArgs);
            StringBuilder urlPath = new StringBuilder(minIOConfigProperties.getReadPath());
            urlPath.append(separator + minIOConfigProperties.getBucket());
            urlPath.append(separator);
            urlPath.append(filePath);
            return urlPath.toString();
        } catch (Exception ex) {
            throw new RuntimeException("上傳文件失敗");
        }
    }

    /**
     * 上傳html文件
     *
     * @param prefix      文件前綴
     * @param filename    文件名
     * @param inputStream 文件流
     * @return 文件全路徑
     */
    @Override
    public String uploadHtmlFile(String prefix, String filename, InputStream inputStream) {
        String filePath = builderFilePath(prefix, filename);
        try {
            PutObjectArgs putObjectArgs = PutObjectArgs.builder()
                    .object(filePath) //文件名
                    .contentType("text/html")//文件類型
                    .bucket(minIOConfigProperties.getBucket())//桶名稱與minio創(chuàng)建的桶一致
                    .stream(inputStream, inputStream.available(), -1)//文件流
                    .build();
            minioClient.putObject(putObjectArgs);
            StringBuilder urlPath = new StringBuilder(minIOConfigProperties.getReadPath());
            urlPath.append(separator + minIOConfigProperties.getBucket());
            urlPath.append(separator);
            urlPath.append(filePath);
            return urlPath.toString(); //文件全路徑
        } catch (Exception ex) {
            ex.printStackTrace();
            throw new RuntimeException("上傳文件失敗");
        }
    }

    /**
     * 刪除文件
     *
     * @param pathUrl 文件全路徑
     */
    @Override
    public void delete(String pathUrl) {
        String key = pathUrl.replace(minIOConfigProperties.getEndpoint() + "/", "");
        int index = key.indexOf(separator);
        String bucket = key.substring(0, index);
        String filePath = key.substring(index + 1);
        // 刪除Objects
        RemoveObjectArgs removeObjectArgs = RemoveObjectArgs.builder().bucket(bucket).object(filePath).build();
        try {
            minioClient.removeObject(removeObjectArgs);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    /**
     * 下載文件
     *
     * @param pathUrl 文件全路徑
     * @return 文件流
     */
    @Override
    public byte[] downLoadFile(String pathUrl) {
        String key = pathUrl.replace(minIOConfigProperties.getEndpoint() + "/", "");
        int index = key.indexOf(separator);
        String bucket = key.substring(0, index);
        String filePath = key.substring(index + 1);
        InputStream inputStream = null;
        try {
            inputStream = minioClient.getObject(GetObjectArgs.builder().bucket(minIOConfigProperties.getBucket()).object(filePath).build());
        } catch (Exception e) {
            e.printStackTrace();
        }

        //字節(jié)數(shù)組輸出流
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        byte[] buff = new byte[100];
        int rc = 0;
        while (true) {
            try {
                if (!((rc = inputStream.read(buff, 0, 100)) > 0)) break;
            } catch (IOException e) {
                e.printStackTrace();
            }
            byteArrayOutputStream.write(buff, 0, rc);
        }
        return byteArrayOutputStream.toByteArray();
    }

}
4.7?編寫controller進行測試
@RestController
@RequestMapping("/minio")
public class MinioController {

    @Autowired
    private FileStorageService fileStorageService;

    /**
     * 上傳圖片到minio
     *
     * @param file
     * @return
     */
    @PostMapping("/upload")
    public void uploadFile(MultipartFile file) throws IOException {
        try {
            // 獲取文件名稱
            String fileName = file.getOriginalFilename();
            /*解決多次上傳同名文件覆蓋問題*/
            // 在文件名稱里面添加隨機唯一的值
            String uuid = UUID.randomUUID().toString().replaceAll("-", "");
            fileName = uuid + fileName;
            // 獲取文件輸入流
            InputStream is = file.getInputStream();
            String imgUrl = fileStorageService.uploadImgFile("img", fileName, is);
            return "上傳成功!imgUrl:"+imgUrl;
        } catch (IOException e) {
            e.printStackTrace();
            return "上傳失敗";
        }
    }

}
4.8 啟動項目,測試

Minio安裝及整合SpringBoot,java,ide

查看 Minio 可視化界面圖片是否上傳成功

Minio安裝及整合SpringBoot,java,ide

可通過ip+圖片路徑直接訪問。?文章來源地址http://www.zghlxwxcb.cn/news/detail-805990.html

到了這里,關于Minio安裝及整合SpringBoot的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

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

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

相關文章

  • 【微服務】springboot整合minio詳解

    目錄 一、前言 二、Minio 概述 2.1?Minio簡介 2.1?Minio特點 三、Minio 環(huán)境搭建

    2024年02月04日
    瀏覽(16)
  • SpringBoot整合minio服務(超詳細)

    SpringBoot整合minio服務(超詳細)

    創(chuàng)建一個名為public的存儲桶(名字可自定義),上傳文件。 通過 http://ip:9000/存儲桶名/文件名 訪問文件 若出現(xiàn): 可以將存儲桶的訪問權限設置為public. 在application.yml文件中編寫相關配置。 開發(fā)中上傳接口用得較多,其他接口可自行測試。? # npm下載element-ui npm install element-

    2024年02月08日
    瀏覽(26)
  • SpringBoot整合Minio的詳細步驟

    小伙伴們好,歡迎關注,一起學習,無限進步 minio 是對象存儲服務。它基于 Apache License 開源協(xié)議,兼容 Amazon S3 云存儲接口。適合存儲非結構化數(shù)據,如圖片,音頻,視頻,日志等。對象文件最大可以達到 5TB。 優(yōu)點有高性能,可擴展,操作簡單,有圖形化操作界面,讀寫性

    2024年04月26日
    瀏覽(23)
  • SpringBoot整合Minio實現(xiàn)文件上傳、下載

    SpringBoot整合Minio實現(xiàn)文件上傳、下載

    SpringBoot整合Minio實現(xiàn)文件上傳、下載: 1,介紹高性能分布式存儲文件服務Minio:Minio是 基于Go語言編寫的對象存儲服務 , 適合于存儲大容量非結構化的數(shù)據 ,例如 圖片、音頻、視頻、日志文件、備份數(shù)據和容器/虛擬機鏡像等 ,而一個對象文件可以是任意大小,從幾kb到最

    2024年02月06日
    瀏覽(34)
  • SpringBoot整合Minio(實現(xiàn)上傳與下載)

    SpringBoot整合Minio(實現(xiàn)上傳與下載)

    MinIO 是一款高性能、分布式的對象存儲系統(tǒng) . 它是一款軟件產品, 可以100%的運行在標準硬件。即X86等低成本機器也能夠很好的運行MinIO。 1.導入環(huán)境所需要的依賴 2.application.yml中進行minio的配置 3.MinIoConfig.class 配置類? 此類主要做一些連接Minio實例化對象的配置 ?4.AjaxResult.cl

    2024年02月07日
    瀏覽(33)
  • Springboot整合minio組件-分布式文件存儲

    一、快速開始 Minlo說明: Minio是Apcche旗下的一款開源的輕量級文件服務器,基于對象存儲,協(xié)議是基于Apache License v2.0,開源可用于商務。 Minio主要用來存儲非結構化的數(shù)據,類似文件,圖片,照片,日志文件,各類備份文件等,按照官網描述,文件的大小從幾KB到5TB。 Minio提

    2024年02月11日
    瀏覽(22)
  • SpringBoot整合minio,文件的上傳下載,批量獲取

    Minio是GlusterFS創(chuàng)始人之一Anand Babu Periasamy發(fā)布新的開源項目。基于Apache License v2.0開源協(xié)議的對象存儲項目,采用Golang實現(xiàn),客戶端支Java,Python,Javacript, Golang語言。 其設計的主要目標是作為私有云對象存儲的標準方案。主要用于存儲海量的圖片,視頻,文檔等。非常適合于存儲

    2024年02月12日
    瀏覽(31)
  • springboot整合Minio + vue 實現(xiàn)文件分片上傳(完整代碼)

    springboot整合Minio + vue 實現(xiàn)文件分片上傳(完整代碼)

    網上關于minio分片上傳的資料不太詳細,缺斤少兩,所以我基于他們的代碼做了一些修改,demo能夠正常運行起來,但是偶爾也會發(fā)生一些小bug,不過這些都無傷大雅,最終目的是理解代碼背后的邏輯和流程 流程: 前端獲取生成文件MD5,發(fā)送至后臺判斷是否有該文件緩存,有

    2024年02月02日
    瀏覽(27)
  • SpringBoot整合minio實現(xiàn)斷點續(xù)傳、分片上傳(附源碼)

    SpringBoot整合minio實現(xiàn)斷點續(xù)傳、分片上傳(附源碼)

    在Web開發(fā)中,大文件的上傳是必不可少的功能之一。本文將介紹如何使用SpringBoot整合minio實現(xiàn)一個簡單的大文件上傳網站。 項目下載 gitee:https://gitee.com/wusupweilgy/springboot-vue.git 前端:vue2、element-ui組件、axios 后端:springboot、minio、mybatis-plus、redis 斷點續(xù)傳 分片上傳 前端顯示

    2024年02月04日
    瀏覽(25)
  • 開源對象存儲系統(tǒng)minio部署配置與SpringBoot客戶端整合訪問

    開源對象存儲系統(tǒng)minio部署配置與SpringBoot客戶端整合訪問

    官方介紹: MinIO 提供高性能、與S3 兼容的對象存儲系統(tǒng),讓你自己能夠構建自己的私有云儲存服務。在 GNU AGPL v3 下是 100% 開源的。 部署簡單,只有一個minio可執(zhí)行文件。 高性能,在 32 個 NVMe 驅動器節(jié)點和 100Gbe 網絡上發(fā)布的 GET/PUT 結果超過 325 GiB/秒和 165 GiB/秒。 Kubernetes原

    2024年02月09日
    瀏覽(26)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包