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

SpringBoot+MinIO實現(xiàn)minio部署和使用

這篇具有很好參考價值的文章主要介紹了SpringBoot+MinIO實現(xiàn)minio部署和使用。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Minio是一個go編寫基于Apache License v2.0開源協(xié)議的對象存儲系統(tǒng),是為海量數(shù)據(jù)存儲、人工智能、大數(shù)據(jù)分析而設(shè)計,它完全兼容Amazon S3接口,十分符合存儲大容量的非結(jié)構(gòu)化數(shù)據(jù)從幾十kb到最大5T不等。是一個小而美的開源分布式存儲軟件。

特點
簡單、可靠:Minio采用簡單可靠的集群方案,摒棄復(fù)雜的大規(guī)模的集群調(diào)度管理,減少風(fēng)險與性能瓶頸,聚焦產(chǎn)品的核心功能,打造高可用的集群、靈活的擴展能力以及超過的性能。建立眾多的中小規(guī)模、易管理的集群,支持跨數(shù)據(jù)中心將多個集群聚合成超大資源池,而非直接采用大規(guī)模、統(tǒng)一管理的分布式集群。

功能完善:Minio支持云原生,能與Kubernetes、Docker、Swarm編排系統(tǒng)良好對接,實現(xiàn)靈活部署。且部署簡單,只有一個可執(zhí)行文件,參數(shù)極少,一條命令即可啟動一個Minio系統(tǒng)。Minio為了高性能采取無元數(shù)據(jù)數(shù)據(jù)庫設(shè)計,避免元數(shù)據(jù)庫成為整個系統(tǒng)的性能瓶頸,并將故障限制在單個集群之內(nèi),從而不會涉及其他集群。Minio同時完全兼容S3接口,因此也可以作為網(wǎng)關(guān)使用,對外提供S3訪問。同時使用Minio Erasure code和checksum 來防止硬件故障。即使損失一半以上的硬盤,但是仍然可以從中恢復(fù)。分布式中也允許(N/2)-1個節(jié)點故障。

docker+rancher部署minio集群
在rancher上創(chuàng)建三個minio服務(wù),這三個選擇的服務(wù)器ip是三臺不同的服務(wù)器ip,在主機調(diào)度中進行選擇不同的主機
端口映射:
SpringBoot+MinIO實現(xiàn)minio部署和使用,spring boot,后端,java
配置環(huán)境變量:

主機調(diào)度
每個指定不同的主機,三臺機器分別運行一個minio
配置數(shù)據(jù)卷
在三臺主機主機的host文件中添加host對應(yīng)關(guān)系

ip1 minio-1
ip2 minio-2
ip3 minio-3

數(shù)據(jù)卷配置
SpringBoot+MinIO實現(xiàn)minio部署和使用,spring boot,后端,java
SpringBoot+MinIO實現(xiàn)minio部署和使用,spring boot,后端,java

網(wǎng)絡(luò)
使用主機網(wǎng)絡(luò):是
入庫命令
server --console-address :9090 http://minio-{1…3}/data{1…2}
SpringBoot+MinIO實現(xiàn)minio部署和使用,spring boot,后端,java

安裝ngxin負載均衡訪問minio在rancher上創(chuàng)建nginx服務(wù)
SpringBoot+MinIO實現(xiàn)minio部署和使用,spring boot,后端,java

數(shù)據(jù)卷映射
進入主機目錄配置nginx,
vi /mnt/nginx/conf.d

內(nèi)容如下:

worker_processes  1;

events {
    worker_connections  1024;
}

http{
  
  #上面安裝主機的三臺機器記得修改
    upstream http_minio_back{
        server ip1:9000;
        server ip2:9000;
        server ip3:9000;
    }
    server{
        listen 6555;
        server_name localhost;
        ignore_invalid_headers off;
        #配置成上傳文件不限制大小
        client_max_body_size 0;
        proxy_buffering off;

        location / {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Host $http_host;
            proxy_set_header X-Forwarded-Host $host:$server_port;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;

            proxy_connect_timeout 300;
            proxy_http_version 1.1;
            chunked_transfer_encoding off;
            proxy_ignore_client_abort on;

            proxy_pass http_minio_back

        }
    }
    }
}

數(shù)據(jù)卷配置引入conf.d
SpringBoot+MinIO實現(xiàn)minio部署和使用,spring boot,后端,java

springboot+minio 實例如下:

pom.xml

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

application.yml配置:

spring:
  # 配置文件上傳大小限制
  servlet:
    multipart:
      max-file-size: 500MB
      max-request-size: 500MB
oss:
  endpoint: ${ENDPOINT:http://nginx的ip:nginx的端口號}
  access-key: ${ACCESS_KEY:minio}
  secret-key: ${SECRET_KEY:minio}

minio配置類

@Configuration
@ApiModel(value = "minio配置")
public class MinIoClientConfig {
	@Value("${oss.endpoint}")
    private String url;
    @Value("${oss.access-key}")
    private String accessKey;
    @Value("${oss.secret-key}")
    private String secretKey;
    @Bean
    public MinioClient minioClient(){
 
        return MinioClient.builder()
                .endpoint(url)
                .credentials(accessKey, secretKey)
                .build();
    }
 }

編寫工具類用于將公用方法寫到工具類中,實現(xiàn)調(diào)用

import cn.hutool.core.io.FastByteArrayOutputStream;
import com.alibaba.nacos.common.util.UuidUtils;
import io.minio.*;
import io.minio.http.Method;
import io.minio.messages.Bucket;
import io.minio.messages.Item;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;

@Component
@Slf4j
@RequiredArgsConstructor
public class MinioUtil {
//必須使用注入的方式否則會出現(xiàn)空指針
    @Autowired
   MinioClient minioClient;

    /**
     * 查看存儲bucket是否存在
     *  bucketName 需要傳入桶名
     * @return boolean
     */
    public Boolean bucketExists(String bucketName) {
        Boolean found;
        try {
            found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return found;
    }

    /**
     * 創(chuàng)建存儲bucket
     *  bucketName 需要傳入桶名
     * @return Boolean
     */
    public Boolean makeBucket(String bucketName) {
        try {
            minioClient.makeBucket(MakeBucketArgs.builder()
                    .bucket(bucketName)
                    .build());
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }
    /**
     * 刪除存儲bucket
     * bucketName 需要傳入桶名
     * @return Boolean
     */
    public Boolean removeBucket(String bucketName) {
        try {
            minioClient.removeBucket(RemoveBucketArgs.builder()
                    .bucket(bucketName)
                    .build());
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }
    /**
     * 獲取全部bucket
     */
    public List<Bucket> getAllBuckets() {
        try {
            List<Bucket> buckets = minioClient.listBuckets();
            return buckets;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }



    /**
     * 文件上傳
     *
     * @param file 文件
     * BucketName 需要傳入桶名
     * @return Boolean
     */
    public String upload(MultipartFile file) {
        String originalFilename = file.getOriginalFilename();
        if (StringUtils.isBlank(originalFilename)){
            throw new RuntimeException();
        }
        String fileName = UuidUtils.generateUuid() + originalFilename.substring(originalFilename.lastIndexOf("."));
        String objectName = "sssss" + "/" + fileName;
        try {
            PutObjectArgs objectArgs = PutObjectArgs.builder().bucket("BucketName").object(objectName)
                    .stream(file.getInputStream(), file.getSize(), -1).contentType(file.getContentType()).build();
            //文件名稱相同會覆蓋
            minioClient.putObject(objectArgs);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return objectName;
    }

    /**
     * 預(yù)覽
     * @param fileName
     * BucketName 需要傳入桶名
     * @return
     */
    public String preview(String fileName){
        // 查看文件地址
        GetPresignedObjectUrlArgs build = new GetPresignedObjectUrlArgs().builder().bucket("BucketName").object(fileName).method(Method.GET).build();
        try {
            String url = minioClient.getPresignedObjectUrl(build);
            return url;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 文件下載
     * @param fileName 文件名稱
     * BucketName 需要傳入桶名
     * @param res response
     * @return Boolean
     */
    public void download(String fileName, HttpServletResponse res) {
        GetObjectArgs objectArgs = GetObjectArgs.builder().bucket("BucketName")
                .object(fileName).build();
        try (GetObjectResponse response = minioClient.getObject(objectArgs)){
            byte[] buf = new byte[1024];
            int len;
            try (FastByteArrayOutputStream os = new FastByteArrayOutputStream()){
                while ((len=response.read(buf))!=-1){
                    os.write(buf,0,len);
                }
                os.flush();
                byte[] bytes = os.toByteArray();
                res.setCharacterEncoding("utf-8");
                // 設(shè)置強制下載不打開
                // res.setContentType("application/force-download");
                res.addHeader("Content-Disposition", "attachment;fileName=" + fileName);
                try (ServletOutputStream stream = res.getOutputStream()){
                    stream.write(bytes);
                    stream.flush();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 查看文件對象
     * BucketName 需要傳入桶名
     * @return 存儲bucket內(nèi)文件對象信息
     */
    public List<Item> listObjects() {
        Iterable<Result<Item>> results = minioClient.listObjects(
                ListObjectsArgs.builder().bucket("BucketName").build());
        List<Item> items = new ArrayList<>();
        try {
            for (Result<Item> result : results) {
                items.add(result.get());
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return items;
    }

    /**
     * 刪除
     * @param fileName
     * BucketName 需要傳入桶名
     * @return
     * @throws Exception
     */
    public boolean remove(String fileName){
        try {
            minioClient.removeObject( RemoveObjectArgs.builder().bucket("BucketName").object(fileName).build());
        }catch (Exception e){
            return false;
        }
        return true;
    }
    }

測試

@RequestMapping("/tesss")
@RestController
public class TestCon {
    @Autowired
    MinioUtil minioUtil;
    @GetMapping("/test")
    public Boolean bucketExists(String bucketName) {
        return minioUtil.bucketExists(bucketName);
    }

    @GetMapping("/test123")
    public Boolean makeBucket(String bucketName) {
        return minioUtil.makeBucket(bucketName);
    }
}

如果想要在上傳完成后再進行下一步的操作 ,應(yīng)該進行如下操作

@Async
	public CompletableFuture<String> uploadFile(String bucketName, String fileName, InputStream stream,PutObjectOptions putObjectOptions){
		CompletableFuture<String> future = new CompletableFuture<>();
		try {
			minioClient.putObject(bucketName, fileName, stream, putObjectOptions);
			future.complete("上傳成功");
		} catch (MinioException | InvalidKeyException | IOException | NoSuchAlgorithmException
				| IllegalArgumentException e) {
			future.completeExceptionally(e);
		}
		return future;
	}

調(diào)用上述方法實現(xiàn)判斷文件是否上傳成功文章來源地址http://www.zghlxwxcb.cn/news/detail-546230.html

public String uploadFileCallAlgorithm(MultipartFile file, String algType,String arithmeticCode) throws IOException {
PutObjectOptions putObjectOptions = new PutObjectOptions(file.getSize(), PutObjectOptions.MIN_MULTIPART_SIZE);
			CompletableFuture<String> future = this.uploadFile(BucketName, fileName, file.getInputStream(), putObjectOptions);
				future.thenAccept(results -> {
				//此處可寫上傳文件完成后的實現(xiàn)邏輯
				}).exceptionally(ex -> {
				return null;
			}).join();
			return miningCode;
		}else {
			return "請上傳csv文件";
		}
}

到了這里,關(guān)于SpringBoot+MinIO實現(xiàn)minio部署和使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Spring Boot 集成Minio

    Spring Boot 集成Minio

    1、docker創(chuàng)建minio容器 (1)Dockerfile文件? (2) 創(chuàng)建鏡像 (3)創(chuàng)建容器 ?訪問minio管理后臺?http://192.168.81.200:8341/login ?賬號密碼? masterminio /? mastermminio 2、Spring Boot 集成minio (1) pom加入minio依賴 (2)yml文件加入配置 (3) 后端代碼編寫 ? ?鏈接配置 ?上傳文件工具類 ?上傳接口開發(fā)

    2024年02月12日
    瀏覽(37)
  • 在 Spring Boot 中集成 MinIO 對象存儲

    在 Spring Boot 中集成 MinIO 對象存儲

    MinIO 是一個開源的對象存儲服務(wù)器,專注于高性能、分布式和兼容S3 API的存儲解決方案。本文將介紹如何在 Spring Boot 應(yīng)用程序中集成 MinIO,以便您可以輕松地將對象存儲集成到您的應(yīng)用中。 安裝minio 拉取 minio Docker鏡像 創(chuàng)建minio數(shù)據(jù)和配置目錄 運行minio容器,設(shè)置訪問和密鑰并

    2024年02月10日
    瀏覽(19)
  • spring boot + minio 分布式文件上傳

    spring boot + minio 分布式文件上傳

    1、分布式文件系統(tǒng) 簡單理解為:一個計算機無法存儲海量的文件,通過網(wǎng)絡(luò)將若干計算機組織起來共同去存儲海量的文件,去接收海量用戶的請求,這些組織起來的計算機通過網(wǎng)絡(luò)進行通信。 好處: 一臺計算機的文件系統(tǒng)處理能力擴充到多臺計算機同時處理。 一臺計算機

    2024年02月08日
    瀏覽(22)
  • MinIO【部署 01】MinIO安裝及SpringBoot集成簡單測試

    MinIO【部署 01】MinIO安裝及SpringBoot集成簡單測試

    下載 https://min.io/download#/linux; 安裝文檔 https://min.io/docs/minio/linux/index.html。 工作臺詳細使用文檔 https://min.io/docs/minio/linux/administration/minio-console.html#minio-console 登錄頁面: 登錄成功: Java Quickstart Guide https://min.io/docs/minio/linux/developers/java/minio-java.html#minio-java-quickstart Java SDK htt

    2024年02月11日
    瀏覽(48)
  • Linux下使用Docker部署MinIO存儲服務(wù)實現(xiàn)遠程上傳

    Linux下使用Docker部署MinIO存儲服務(wù)實現(xiàn)遠程上傳

    本文主要是Linux下通過Docker部署MinIO存儲服務(wù)實現(xiàn)遠程上傳的文章,如果有什么需要改進的地方還請大佬指出?? ??作者簡介:大家好,我是青衿?? ??博客首頁:CSDN主頁放風(fēng)講故事 ??每日一句:努力一點,優(yōu)秀一點 前言 MinIO是一個開源的對象存儲服務(wù)器,可以在各種環(huán)

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

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

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

    2024年02月09日
    瀏覽(25)
  • springboot實現(xiàn)minio文件分片上傳

    在Spring Boot中實現(xiàn)MinIO的文件分片上傳涉及到幾個關(guān)鍵步驟。MinIO是一個高性能的分布式對象存儲服務(wù),它兼容Amazon S3的API。分片上傳主要用于上傳大文件,將大文件分成多個部分,分別上傳,最后再將這些部分合并成一個完整的文件。這樣做的好處是提高了上傳的可靠性,并

    2024年01月17日
    瀏覽(24)
  • springboot實現(xiàn)文件上傳到minio

    一、前言 最近在項目中用的使用minio來上傳文件,因此在這里給告訴大家如何實現(xiàn) 二、實現(xiàn)文件上傳至minio 1.添加相關(guān)的maven依賴 2.minio連接配置 (1)首先配置minio屬性 (2)接著配置minio連接,代碼如下: (3)在YAML添加minio配置 3.定義minio工具類,代碼如下: 4.編寫實現(xiàn)文件

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

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

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

    2024年02月07日
    瀏覽(32)
  • SpringBoot + minio實現(xiàn)分片上傳、秒傳、續(xù)傳

    SpringBoot + minio實現(xiàn)分片上傳、秒傳、續(xù)傳

    MinIO是一個基于Go實現(xiàn)的高性能、兼容S3協(xié)議的對象存儲。它采用GNU AGPL v3開源協(xié)議,項目地址是https://github.com/minio/minio。 引用官網(wǎng): MinIO是根據(jù)GNU Affero通用公共許可證v3.0發(fā)布的高性能對象存儲。它與Amazon S3云存儲服務(wù)兼容。使用MinIO構(gòu)建用于機器學(xué)習(xí),分析和應(yīng)用程序數(shù)據(jù)工

    2024年02月08日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包