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

SpringBoot整合minio服務(wù)的示例代碼

 更新時(shí)間:2023年06月11日 16:15:30   作者:不涼帥  
本文主要介紹了SpringBoot整合minio服務(wù)的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一、使用docker部署minio

1、拉取鏡像

docker pull minio/minio

2、創(chuàng)建目錄

mkdir -p /home/minio/config
mkdir -p /home/minio/data

3、創(chuàng)建Minio容器并運(yùn)行

docker run -p 9000:9000 -p 9090:9090 \
     --net=host \
     --name minio \
     -d --restart=always \
     -e "MINIO_ACCESS_KEY=minioadmin" \
     -e "MINIO_SECRET_KEY=minioadmin" \
     -v /home/minio/data:/data \
     -v /home/minio/config:/root/.minio \
     minio/minio server \
     /data --console-address ":9090" -address ":9000"

4、登錄minio控制臺(tái)

 5、創(chuàng)建buckets存儲(chǔ)桶測(cè)試 

創(chuàng)建一個(gè)名為public的存儲(chǔ)桶(名字可自定義),上傳文件。

通過(guò)http://ip:9000/存儲(chǔ)桶名/文件名訪問(wèn)文件

若出現(xiàn):

可以將存儲(chǔ)桶的訪問(wèn)權(quán)限設(shè)置為public.

二、SpringBoot整合minio

1、創(chuàng)建minio-demo項(xiàng)目

2、引入pom依賴

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

3、編寫配置文件

在application.yml文件中編寫相關(guān)配置。

server:
  port: 8081
spring:
  # 配置文件上傳大小限制
  servlet:
    multipart:
      max-file-size: 200MB
      max-request-size: 200MB
minio:
  host: http://127.0.0.1:9000
  url: ${minio.host}/${minio.bucket}/
  access-key: minioadmin
  secret-key: minioadmin
  bucket: public
 

4、編寫MinioConfig配置類

import io.minio.MinioClient;
import io.minio.PutObjectOptions;
import io.minio.Result;
import io.minio.messages.Bucket;
import io.minio.messages.Item;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.util.UriUtils;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
@Component
public class MinioConfig implements InitializingBean {
    @Value(value = "${minio.bucket}")
    private String bucket;
    @Value(value = "${minio.host}")
    private String host;
    @Value(value = "${minio.url}")
    private String url;
    @Value(value = "${minio.access-key}")
    private String accessKey;
    @Value(value = "${minio.secret-key}")
    private String secretKey;
    private MinioClient minioClient;
    @Override
    public void afterPropertiesSet()
            throws Exception {
        Assert.hasText(url, "Minio url 為空");
        Assert.hasText(accessKey, "Minio accessKey為空");
        Assert.hasText(secretKey, "Minio secretKey為空");
        this.minioClient = new MinioClient(this.host, this.accessKey, this.secretKey);
    }
    /**
     * 上傳
     *
     * @param multipartFile
     * @return
     * @throws Exception
     */
    public String putObject(MultipartFile multipartFile) throws Exception {
        // bucket 不存在,創(chuàng)建
        if (!minioClient.bucketExists(this.bucket)) {
            minioClient.makeBucket(this.bucket);
        }
        try (InputStream inputStream = multipartFile.getInputStream()) {
            // 上傳文件的名稱
            String fileName = multipartFile.getOriginalFilename();
            // PutObjectOptions,上傳配置(文件大小,內(nèi)存中文件分片大小)
            PutObjectOptions putObjectOptions =
                    new PutObjectOptions(multipartFile.getSize(), PutObjectOptions.MIN_MULTIPART_SIZE);
            // 文件的ContentType
            putObjectOptions.setContentType(multipartFile.getContentType());
            minioClient.putObject(this.bucket, fileName, inputStream, putObjectOptions);
            // 返回訪問(wèn)路徑
            return this.url + UriUtils.encode(fileName, StandardCharsets.UTF_8);
        }
    }
    /**
     * 列出所有存儲(chǔ)桶名稱
     *
     * @return
     * @throws Exception
     */
    public List<String> listBucketNames()
            throws Exception {
        List<Bucket> bucketList = listBuckets();
        List<String> bucketListName = new ArrayList<>();
        for (Bucket bucket : bucketList) {
            bucketListName.add(bucket.name());
        }
        return bucketListName;
    }
    /**
     * 查看所有桶
     *
     * @return
     * @throws Exception
     */
    public List<Bucket> listBuckets()
            throws Exception {
        return minioClient.listBuckets();
    }
    /**
     * 檢查存儲(chǔ)桶是否存在
     *
     * @param bucketName
     * @return
     * @throws Exception
     */
    public boolean bucketExists(String bucketName) throws Exception {
        boolean flag = minioClient.bucketExists(bucketName);
        if (flag) {
            return true;
        }
        return false;
    }
    /**
     * 創(chuàng)建存儲(chǔ)桶
     *
     * @param bucketName
     * @return
     * @throws Exception
     */
    public boolean makeBucket(String bucketName)
            throws Exception {
        boolean flag = bucketExists(bucketName);
        if (!flag) {
            minioClient.makeBucket(bucketName);
            return true;
        } else {
            return false;
        }
    }
    /**
     * 刪除桶
     *
     * @param bucketName
     * @return
     * @throws Exception
     */
    public boolean removeBucket(String bucketName)
            throws Exception {
        boolean flag = bucketExists(bucketName);
        if (flag) {
            Iterable<Result<Item>> myObjects = listObjects(bucketName);
            for (Result<Item> result : myObjects) {
                Item item = result.get();
                // 有對(duì)象文件,則刪除失敗
                if (item.size() > 0) {
                    return false;
                }
            }
            // 刪除存儲(chǔ)桶,注意,只有存儲(chǔ)桶為空時(shí)才能刪除成功。
            minioClient.removeBucket(bucketName);
            flag = bucketExists(bucketName);
            if (!flag) {
                return true;
            }
        }
        return false;
    }
    /**
     * 列出存儲(chǔ)桶中的所有對(duì)象
     *
     * @param bucketName 存儲(chǔ)桶名稱
     * @return
     * @throws Exception
     */
    public Iterable<Result<Item>> listObjects(String bucketName) throws Exception {
        boolean flag = bucketExists(bucketName);
        if (flag) {
            return minioClient.listObjects(bucketName);
        }
        return null;
    }
    /**
     * 列出存儲(chǔ)桶中的所有對(duì)象名稱
     *
     * @param bucketName 存儲(chǔ)桶名稱
     * @return
     * @throws Exception
     */
    public List<String> listObjectNames(String bucketName) throws Exception {
        List<String> listObjectNames = new ArrayList<>();
        boolean flag = bucketExists(bucketName);
        if (flag) {
            Iterable<Result<Item>> myObjects = listObjects(bucketName);
            for (Result<Item> result : myObjects) {
                Item item = result.get();
                listObjectNames.add(item.objectName());
            }
        }
        return listObjectNames;
    }
    /**
     * 刪除一個(gè)對(duì)象
     *
     * @param bucketName 存儲(chǔ)桶名稱
     * @param objectName 存儲(chǔ)桶里的對(duì)象名稱
     * @throws Exception
     */
    public boolean removeObject(String bucketName, String objectName) throws Exception {
        boolean flag = bucketExists(bucketName);
        if (flag) {
            List<String> objectList = listObjectNames(bucketName);
            for (String s : objectList) {
                if(s.equals(objectName)){
                    minioClient.removeObject(bucketName, objectName);
                    return true;
                }
            }
        }
        return false;
    }
    /**
     * 文件訪問(wèn)路徑
     *
     * @param bucketName 存儲(chǔ)桶名稱
     * @param objectName 存儲(chǔ)桶里的對(duì)象名稱
     * @return
     * @throws Exception
     */
    public String getObjectUrl(String bucketName, String objectName) throws Exception {
        boolean flag = bucketExists(bucketName);
        String url = "";
        if (flag) {
            url = minioClient.getObjectUrl(bucketName, objectName);
        }
        return url;
    }
}
 

開(kāi)發(fā)中上傳接口用得較多,其他接口可自行測(cè)試。 

三、Vue+Element-ui前端交互

# npm下載element-ui
npm install element-ui -S
// 引入ElementUI
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
Vue.use(ElementUI)

到此這篇關(guān)于SpringBoot整合minio服務(wù)的示例代碼的文章就介紹到這了,更多相關(guān)SpringBoot整合minio服務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java避免死鎖_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java避免死鎖_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    在有些情況下死鎖是可以避免的。本文將展示三種用于避免死鎖的技術(shù)。對(duì)java避免死鎖的相關(guān)知識(shí)感興趣的朋友一起通過(guò)本文學(xué)習(xí)吧
    2017-06-06
  • Spring為什么不推薦使用@Autowired注解詳析

    Spring為什么不推薦使用@Autowired注解詳析

    @Autowired 注解的主要功能就是完成自動(dòng)注入,使用也非常簡(jiǎn)單,但這篇文章主要給大家介紹了關(guān)于Spring為什么不推薦使用@Autowired注解的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • Java中使用COS實(shí)現(xiàn)文件上傳功能

    Java中使用COS實(shí)現(xiàn)文件上傳功能

    cos是O'Rrilly公司開(kāi)發(fā)的一款用于HTTP上傳文件的OpenSource組件。下面通過(guò)本文給大家分享使用COS實(shí)現(xiàn)文件上傳功能,感興趣的朋友一起看看吧
    2017-08-08
  • java并發(fā)編程專題(九)----(JUC)淺析CyclicBarrier

    java并發(fā)編程專題(九)----(JUC)淺析CyclicBarrier

    這篇文章主要介紹了java CyclicBarrier的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • SpringBoot優(yōu)雅地實(shí)現(xiàn)全局異常處理的方法詳解

    SpringBoot優(yōu)雅地實(shí)現(xiàn)全局異常處理的方法詳解

    這篇文章主要為大家詳細(xì)介紹了SpringBoot如何優(yōu)雅地實(shí)現(xiàn)全局異常處理,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-08-08
  • java類加載器和類反射使用示例

    java類加載器和類反射使用示例

    這篇文章主要介紹了java類加載器和類反射使用示例,需要的朋友可以參考下
    2014-03-03
  • Java的LinkedHashMap的實(shí)現(xiàn)原理詳解

    Java的LinkedHashMap的實(shí)現(xiàn)原理詳解

    這篇文章主要介紹了Java的LinkedHashMap的實(shí)現(xiàn)原理詳解,???LinkedHashMap是Map接口的哈希表和鏈接列表實(shí)現(xiàn),具有可預(yù)知的迭代順序,此實(shí)現(xiàn)提供所有可選的映射操作,并允許使用null值和null鍵,此類不保證映射的順序,特別是它不保證該順序恒久不變,需要的朋友可以參考下
    2023-09-09
  • 解讀Spring定義Bean的兩種方式:<bean>和@Bean

    解讀Spring定義Bean的兩種方式:<bean>和@Bean

    這篇文章主要介紹了Spring定義Bean的兩種方式:<bean>和@Bean,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • java制作仿微信視頻播放控件

    java制作仿微信視頻播放控件

    這篇文章主要介紹了java制作仿微信視頻播放控件的方法和代碼分享,控件繼承自SurfaceView,十分的實(shí)用,小伙伴們可以自由擴(kuò)展。
    2015-04-04
  • Java實(shí)現(xiàn)遞歸計(jì)算n的階乘

    Java實(shí)現(xiàn)遞歸計(jì)算n的階乘

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)遞歸計(jì)算n的階乘,利用遞歸的思想實(shí)現(xiàn)階乘的計(jì)算,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評(píng)論