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

Spring Boot 集成Minio

這篇具有很好參考價(jià)值的文章主要介紹了Spring Boot 集成Minio。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1、docker創(chuàng)建minio容器

(1)Dockerfile文件?

FROM  docker.io/minio/minio
CMD  ["minio","server","/data","--console-address","0.0.0.0:8341"]

(2) 創(chuàng)建鏡像

docker build -t master-minio -f  ./Dockerfile  .

(3)創(chuàng)建容器

docker run  -d --name master-minio  
            -p 8341:8341  -p 9000:9000   -p 9001:9001 
            -e TZ=Asia/Shanghai  
            -e MINIO_ROOT_USER=masterminio 
            -e MINIO_ROOT_PASSWORD=masterminio
            -v ./data:/data  master-minio
          

springboot集成minio,spring boot,docker,minio,golang

?訪問minio管理后臺?http://192.168.81.200:8341/loginspringboot集成minio,spring boot,docker,minio,golang

?賬號密碼? masterminio /? mastermminio

2、Spring Boot 集成minio

(1) pom加入minio依賴

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

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.10.0</version>
</dependency>

(2)yml文件加入配置

minio:
  endpoint: http://192.168.81.200:9000
  accessKey: masterminio
  secretKey: masterminio
  bucketName: wmy

(3) 后端代碼編寫

? ?鏈接配置

@Configuration
@Slf4j
public class MinioClientConfig {

    @Value("${minio.endpoint}")
    private String endpoint;

    @Value("${minio.accessKey}")
    private String accessKey;

    @Value("${minio.secretKey}")
    private String secretKey;

    @Value("${minio.bucketName}")
    private String bucketName;

    @Bean
    public MinioClient minioClient() {
        log.info("endpoint={}  ,  accessKey={}  ,secretKey={}", endpoint, accessKey, secretKey);
        return MinioClient.builder().credentials(accessKey, secretKey).endpoint(endpoint).build();
    }
}

?上傳文件工具類

@Component
public class MinioUtils {

    @Autowired
    private MinioClient minioClient;


    /**
     * 判斷桶是否存在
     */
    @SneakyThrows(Exception.class)
    public boolean bucketExists(String bucketName) {
        return minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
    }


    /**
     * 創(chuàng)建桶
     * @param bucketName
     * 獲取全部的桶  minioClient.listBuckets();
     */
    @SneakyThrows(Exception.class)
    public void createBucket(String bucketName) {
        if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) {
            minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
        }
    }


    /**
     * 根據(jù)bucketName獲取信息
     * @param bucketName bucket名稱
     */
    @SneakyThrows(Exception.class)
    public Optional<Bucket> getBucket(String bucketName) {
        return minioClient.listBuckets().stream().filter(b -> b.name().equals(bucketName)).findFirst();
    }

    /**
     * 根據(jù)bucketName刪除信息
     * @param bucketName bucket名稱
     */
    @SneakyThrows(Exception.class)
    public  void removeBucket(String bucketName) {
        minioClient.removeBucket(RemoveBucketArgs.builder().bucket(bucketName).build());
    }

    /**
     * 獲取文件流
     * @param bucketName bucket名稱
     * @param objectName 文件名稱
     * @return 二進(jìn)制流
     */
    @SneakyThrows(Exception.class)
    public InputStream getObject(String bucketName, String objectName) {
        return minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(objectName).build());
    }


    /**
     * 上傳本地文件
     * @param bucketName 存儲桶
     * @param objectName 對象名稱
     * @param fileName   本地文件路徑
     */
    @SneakyThrows(Exception.class)
    public  ObjectWriteResponse putObject(String bucketName, String objectName, String fileName) {
        if(!bucketExists(bucketName)){
           createBucket(bucketName);
        }
        return minioClient.uploadObject(UploadObjectArgs.builder().bucket(bucketName).object(objectName).filename(fileName).build());
    }

    /**
     * 通過流上傳文件
     * @param bucketName  存儲桶
     * @param objectName  文件對象
     * @param inputStream 文件流
     */
    @SneakyThrows(Exception.class)
    public  ObjectWriteResponse putObject(String bucketName, String objectName, InputStream inputStream) {
        if(!bucketExists(bucketName)){
            createBucket(bucketName);
        }
        return minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).object(objectName).stream(inputStream, inputStream.available(), -1).build());
    }


    /**
     * 單個文件上傳遞
     * @param bucketName
     * @param multipartFile
     * @return
     */
    @SneakyThrows(Exception.class)
    public   String   uploadFileSingle(String  bucketName,MultipartFile multipartFile )  {
        if(!bucketExists(bucketName)){
            createBucket(bucketName);
        }
        String fileName = multipartFile.getOriginalFilename();
        String[] split = fileName.split("\\.");
        if (split.length > 1) {
            fileName = split[0] + "_" + System.currentTimeMillis() + "." + split[1];
        } else {
            fileName = fileName + System.currentTimeMillis();
        }
        InputStream in = null;
        try {
            in = multipartFile.getInputStream();
            minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).object(fileName).stream(in, in.available(), -1).contentType(multipartFile.getContentType()).build());
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return  getUploadObjectUrl(bucketName,fileName, 7*24*60*60);
    }


    /**
     * description: 上傳文件
     * @param multipartFile
     * @return: java.lang.String
     */
    public List<String> uploadFileBatch(String  bucketName,MultipartFile[] multipartFile) {
        if(!bucketExists(bucketName)){
            createBucket(bucketName);
        }
        List<String> names = new ArrayList<>();
        for (MultipartFile file : multipartFile) {
            try {
                String fileName = file.getOriginalFilename();
                uploadFileSingle(bucketName,file);
                names.add(fileName);
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        return names;
    }


    /**
     * 獲取文件外鏈
     * @param bucketName bucket名稱
     * @param objectName 文件名稱
     * @param expires    過期時(shí)間 <=7 秒級
     * @return url
     */
    @SneakyThrows(Exception.class)
    public  String getUploadObjectUrl(String bucketName, String objectName, Integer expires)  {
        return minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder().method(Method.PUT).bucket(bucketName).object(objectName).expiry(expires).build());
    }

    /**
     * 下載文件
     * bucketName:桶名
     * @param fileName: 文件名
     */
    @SneakyThrows(Exception.class)
    public  void download(String  bucketName,String fileName, HttpServletResponse response) {
        // 獲取對象的元數(shù)據(jù)
        StatObjectResponse  stat = minioClient.statObject(StatObjectArgs.builder().bucket(bucketName).object(fileName).build());
        response.setContentType(stat.contentType());
        response.setCharacterEncoding("UTF-8");
        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
        InputStream is = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).build());
        IOUtils.copy(is, response.getOutputStream());
        is.close();
    }

}

?上傳接口開發(fā)

    @SneakyThrows
    @PostMapping("/uploadFile")
    @ResponseBody
    public  String  uploadFile(@RequestParam("file")MultipartFile  multipartFile  ){
        log.info("uploadFile  ----   -----  start ");
        String imgPath = minioUtils.uploadFileSingle(bucketName, multipartFile);
        log.info("uploadFile  ----   -----  end {}",imgPath);
        return   imgPath;
    }

(3)前端代碼編寫

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>測試Minio上傳文件</title>
    <style>
        a.upload-img {
            width: 165px;
            display: inline-block;
            margin-bottom: 10px;
            text-align: center;
            height: 37px;
            line-height: 37px;
            font-size: 14px;
            color: #FFFFFF;
            background-color: #f38e81;
            border-radius: 3px;
            text-decoration: none;
            cursor: pointer;
            border: 0px #fff solid;
            box-shadow: 0px 0px 5px #B0B0B0;
        }
    </style>
</head>
<body>

   <div style="width: 100%;flex: auto">
      <form id="img-form">
          <a href="javascript:void(0)" class="upload-img"><label for="inputImage">上傳圖像</label> </a>
          <input  onchange="doUpload()" type="file" name="file" id="inputImage" accept="image/*"/>
      </form>
       <img  height="120px" style="margin-left: 20px" >
   </div>

   <script>
       let  doUpload=()=>{
           console.log("1---> start  upload ");
           let file =  document.getElementById("inputImage").files[0];
           if (/^image\/\w+$/.test(file.type)) {
               let form = document.getElementById("img-form");
               let formData = new FormData(form);
               let oReq = new XMLHttpRequest();
               oReq.open("POST", "http://127.0.0.1:9055/uploadFile", true);
               oReq.send(formData);
               oReq.onload = function(oEvent) {
                   if(oReq.status == 200) {
                       alert("Uploaded Success");
                       console.log("1---> end  upload ",oReq.response)
                   }
               }
           }
       }

   </script>
</body>
</html>

(4)上傳結(jié)果查看

springboot集成minio,spring boot,docker,minio,golang

?文章來源地址http://www.zghlxwxcb.cn/news/detail-527780.html

到了這里,關(guān)于Spring Boot 集成Minio的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【Spring Boot】Spring Boot集成RabbitMQ

    Spring Boot提供了`spring-boot-starter-amqp`組件,只需要簡單地配置即可與Spring Boot無縫集成。下面通過示例演示集成RabbitMQ實(shí)現(xiàn)消息的接收和發(fā)送。 步驟01?配置pom包。 創(chuàng)建Spring Boot項(xiàng)目并在pom.xml文件中添加spring-bootstarter-amqp等相關(guān)組件依賴: 在上面的示例中,引入Spring Boot自帶的

    2024年02月06日
    瀏覽(17)
  • Spring Boot + MinIO 實(shí)現(xiàn)文件切片極速上傳技術(shù)

    Spring Boot + MinIO 實(shí)現(xiàn)文件切片極速上傳技術(shù)

    ??歡迎來到SpringBoot框架學(xué)習(xí)專欄~ ☆* o(≧▽≦)o *☆嗨~我是IT·陳寒?? ?博客主頁:IT·陳寒的博客 ??該系列文章專欄:SpringBoot ??其他專欄:Java學(xué)習(xí)路線 Java面試技巧 Java實(shí)戰(zhàn)項(xiàng)目 AIGC人工智能 數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí) ??文章作者技術(shù)和水平有限,如果文中出現(xiàn)錯誤,希望大家能指

    2024年02月04日
    瀏覽(22)
  • Spring Boot + minio 實(shí)現(xiàn)高性能存儲服務(wù),So Easy~!

    Spring Boot + minio 實(shí)現(xiàn)高性能存儲服務(wù),So Easy~!

    引用官網(wǎng): MinIO是根據(jù)GNU Affero通用公共許可證v3.0發(fā)布的高性能對象存儲。它與Amazon S3云存儲服務(wù)兼容。使用MinIO構(gòu)建用于機(jī)器學(xué)習(xí),分析和應(yīng)用程序數(shù)據(jù)工作負(fù)載的高性能基礎(chǔ)架構(gòu)。 官網(wǎng)地址: https://min.io/ 文檔地址: https://docs.min.io/ GNU / Linux和macOS windows MINIO_ROOT_USER :為用

    2024年02月08日
    瀏覽(27)
  • 【Spring Boot】Spring Boot 集成 RocketMQ 實(shí)現(xiàn)簡單的消息發(fā)送和消費(fèi)

    【Spring Boot】Spring Boot 集成 RocketMQ 實(shí)現(xiàn)簡單的消息發(fā)送和消費(fèi)

    本文主要有以下內(nèi)容: 簡單消息的發(fā)送 順序消息的發(fā)送 RocketMQTemplate的API介紹 環(huán)境搭建: RocketMQ的安裝教程:在官網(wǎng)上下載bin文件,解壓到本地,并配置環(huán)境變量,如下圖所示: 在 Spring boot 項(xiàng)目中引入 RocketMQ 依賴: 在application.yml增加相關(guān)配置: 在 Spring Boot 中使用RocketM

    2024年02月14日
    瀏覽(93)
  • Spring Boot整合Minio實(shí)現(xiàn)上傳憑證、分片上傳、秒傳和斷點(diǎn)續(xù)傳

    Spring Boot整合Minio后,前端的文件上傳有兩種方式: 文件上傳到后端,由后端保存到Minio 這種方式好處是完全由后端集中管理,可以很好的做到、身份驗(yàn)證、權(quán)限控制、文件與處理等,并且可以做一些額外的業(yè)務(wù)邏輯,比如生成縮略圖、提取元數(shù)據(jù)等。 缺點(diǎn)也很明顯: 延遲時(shí)

    2024年02月04日
    瀏覽(26)
  • Spring Boot進(jìn)階(51):Spring Boot項(xiàng)目如何集成 HTML?| 超級詳細(xì),建議收藏

    Spring Boot進(jìn)階(51):Spring Boot項(xiàng)目如何集成 HTML?| 超級詳細(xì),建議收藏

    ? ? ? ? 我們都知道,Spring Boot作為一款廣泛應(yīng)用于企業(yè)級的開發(fā)框架,其通過簡化開發(fā)過程、提高開發(fā)效率贏得了眾多開發(fā)者的青睞。在實(shí)際項(xiàng)目開發(fā)中,集成 HTML作為 Web 應(yīng)用程序中的一個基本需求,也是現(xiàn)在極其常見的場景之一。在此,我將為大家分享一下Spring Boot如何

    2024年02月15日
    瀏覽(30)
  • Spring Boot進(jìn)階(67):高性能緩存!使用Spring Boot輕松集成Memcached。

    Spring Boot進(jìn)階(67):高性能緩存!使用Spring Boot輕松集成Memcached。

    ????????Memcached是一款高性能的分布式內(nèi)存對象緩存系統(tǒng),主要用于動態(tài)Web應(yīng)用中減輕數(shù)據(jù)庫負(fù)載。Spring Boot是一款基于Spring框架的快速開發(fā)框架,集成了大量的常用技術(shù)和組件,方便開發(fā)者快速搭建項(xiàng)目。將兩者結(jié)合起來,可以提高Web應(yīng)用的性能,并減少數(shù)據(jù)庫的壓力。

    2024年02月07日
    瀏覽(31)
  • Spring Boot進(jìn)階(84):Spring Boot集成Shiro:安全、簡單、快捷 | 超級詳細(xì),建議收藏

    ????????隨著互聯(lián)網(wǎng)的快速發(fā)展,越來越多的應(yīng)用程序需要進(jìn)行用戶身份驗(yàn)證和權(quán)限控制,保障系統(tǒng)的安全性和穩(wěn)定性,以此而來Shiro。Shiro是一個易于使用的Java安全框架,其提供了身份驗(yàn)證、授權(quán)、加密、會話管理等功能,可以輕松地與Spring框架集成,是企業(yè)級應(yīng)用程序

    2024年02月04日
    瀏覽(29)
  • Spring Boot集成etcd

    etcd是一個分布式鍵值存儲數(shù)據(jù)庫,用于共享配置和服務(wù)發(fā)現(xiàn)。 它是由CoreOS團(tuán)隊(duì)開發(fā)并開源的,具備以下特點(diǎn):簡單、安全、高性能、一致可靠等 。etcd采用Go語言編寫,具有出色的跨平臺支持,很小的二進(jìn)制文件和強(qiáng)大的社區(qū)。etcd機(jī)器之間的通信通過Raft算法處理。 Spring Bo

    2024年02月11日
    瀏覽(12)
  • spring boot 集成rocketmq

    在現(xiàn)代的微服務(wù)架構(gòu)中,消息隊(duì)列已經(jīng)成為一種常見的異步處理模式,它能解決服務(wù)間的同步調(diào)用、耦合度高、流量高峰等問題。RocketMQ是阿里巴巴開源的一款消息中間件,性能優(yōu)秀,功能齊全,被廣泛應(yīng)用在各種業(yè)務(wù)場景。 本文將詳細(xì)介紹如何在Spring Boot項(xiàng)目中集成RocketM

    2024年02月14日
    瀏覽(17)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包