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

SpringBoot整合minio服務的示例代碼

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

一、使用docker部署minio

1、拉取鏡像

docker pull minio/minio

2、創(chuàng)建目錄

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

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

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控制臺

 5、創(chuàng)建buckets存儲桶測試 

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

通過http://ip:9000/存儲桶名/文件名訪問文件

若出現(xiàn):

可以將存儲桶的訪問權限設置為public.

二、SpringBoot整合minio

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

2、引入pom依賴

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

3、編寫配置文件

在application.yml文件中編寫相關配置。

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,上傳配置(文件大小,內存中文件分片大小)
            PutObjectOptions putObjectOptions =
                    new PutObjectOptions(multipartFile.getSize(), PutObjectOptions.MIN_MULTIPART_SIZE);
            // 文件的ContentType
            putObjectOptions.setContentType(multipartFile.getContentType());
            minioClient.putObject(this.bucket, fileName, inputStream, putObjectOptions);
            // 返回訪問路徑
            return this.url + UriUtils.encode(fileName, StandardCharsets.UTF_8);
        }
    }
    /**
     * 列出所有存儲桶名稱
     *
     * @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();
    }
    /**
     * 檢查存儲桶是否存在
     *
     * @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)建存儲桶
     *
     * @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();
                // 有對象文件,則刪除失敗
                if (item.size() > 0) {
                    return false;
                }
            }
            // 刪除存儲桶,注意,只有存儲桶為空時才能刪除成功。
            minioClient.removeBucket(bucketName);
            flag = bucketExists(bucketName);
            if (!flag) {
                return true;
            }
        }
        return false;
    }
    /**
     * 列出存儲桶中的所有對象
     *
     * @param bucketName 存儲桶名稱
     * @return
     * @throws Exception
     */
    public Iterable<Result<Item>> listObjects(String bucketName) throws Exception {
        boolean flag = bucketExists(bucketName);
        if (flag) {
            return minioClient.listObjects(bucketName);
        }
        return null;
    }
    /**
     * 列出存儲桶中的所有對象名稱
     *
     * @param bucketName 存儲桶名稱
     * @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;
    }
    /**
     * 刪除一個對象
     *
     * @param bucketName 存儲桶名稱
     * @param objectName 存儲桶里的對象名稱
     * @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;
    }
    /**
     * 文件訪問路徑
     *
     * @param bucketName 存儲桶名稱
     * @param objectName 存儲桶里的對象名稱
     * @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;
    }
}
 

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

三、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)

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

相關文章

  • 代碼詳解Java猴子選王問題(約瑟夫環(huán))

    代碼詳解Java猴子選王問題(約瑟夫環(huán))

    本篇文章通過實例給大家分析了java約瑟夫環(huán)這個經(jīng)典內容,有興趣的跟著小編一起學習下吧。
    2018-02-02
  • Spring?循環(huán)依賴之AOP實現(xiàn)詳情

    Spring?循環(huán)依賴之AOP實現(xiàn)詳情

    這篇文章主要介紹了Spring?循環(huán)依賴之AOP實現(xiàn)詳情,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的盆友可以參考一下
    2022-07-07
  • SpringBoot bean的多種加載方式示例詳解

    SpringBoot bean的多種加載方式示例詳解

    本文詳細介紹了在SpringBoot中加載Bean的多種方式,包括通過xml配置文件、注解定義、特殊方式如FactoryBean、@ImportResource、ApplicationContext以及使用@Import注解導入bean的方法,感興趣的朋友跟隨小編一起看看吧
    2024-10-10
  • 詳解JAVA SPI機制和使用方法

    詳解JAVA SPI機制和使用方法

    這篇文章主要介紹了JAVA SPI機制的相關知識以及使用示例,文中代碼非常詳細,幫助大家更好的學習,感興趣的朋友可以了解下
    2020-06-06
  • Java語言資源國際化步驟解析

    Java語言資源國際化步驟解析

    這篇文章主要介紹了Java語言資源國際化步驟解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • Java?poi-tl根據(jù)模板生成word文件的完整指南

    Java?poi-tl根據(jù)模板生成word文件的完整指南

    這篇文章主要為大家詳細介紹了Java?poi-tl根據(jù)模板生成word文件的相關方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-12-12
  • Java實現(xiàn)文件上傳保存

    Java實現(xiàn)文件上傳保存

    這篇文章主要為大家詳細介紹了Java實現(xiàn)文件上傳保存,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • SpringBoot中的事務處理問題

    SpringBoot中的事務處理問題

    這篇文章主要介紹了SpringBoot中的事務處理問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 詳解Java Slipped Conditions

    詳解Java Slipped Conditions

    這篇文章主要介紹了Java Slipped Conditions的相關資料,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2021-01-01
  • 對java for 循環(huán)執(zhí)行順序的詳解

    對java for 循環(huán)執(zhí)行順序的詳解

    今天小編就為大家分享一篇對java for 循環(huán)執(zhí)行順序的詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06

最新評論

土默特右旗| 肥西县| 芦山县| 舟山市| 花莲市| 庄浪县| 柏乡县| 平乐县| 股票| 长春市| 班戈县| 湘乡市| 湘阴县| 星座| 华坪县| 桃园县| 玛沁县| 搜索| 湘乡市| 甘孜县| 武汉市| 襄樊市| 阿尔山市| 大同市| 台东市| 江城| 平江县| 耒阳市| 杭锦后旗| 楚雄市| 五河县| 即墨市| 南漳县| 平远县| 玉溪市| 绥滨县| 宝应县| 铜陵市| 东源县| 仙居县| 当阳市|