最新国产好看的视频,伊人天堂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)這個經典內容,有興趣的跟著小編一起學習下吧。
    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根據模板生成word文件的完整指南

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

    這篇文章主要為大家詳細介紹了Java?poi-tl根據模板生成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

最新評論

新河县| 台南市| 贵德县| 象州县| 辽阳市| 顺平县| 花莲市| 临洮县| 盐亭县| 德庆县| 辛集市| 石泉县| 尉氏县| 旅游| 湖南省| 台北市| 四平市| 石屏县| 当涂县| 冷水江市| 湖北省| 遵义市| 读书| 阿拉善左旗| 长白| 晋宁县| 禄丰县| 蒙城县| 西宁市| 巩留县| 志丹县| 开阳县| 凤庆县| 万年县| 鸡东县| 鹰潭市| 庆阳市| 达州市| 大田县| 吉木乃县| 曲沃县|