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

springboot?使用?minio的示例代碼

 更新時(shí)間:2022年03月23日 09:50:07   作者:安和橋@write_boy  
Minio是Apcche旗下的一款開源的輕量級(jí)文件服務(wù)器,基于對(duì)象存儲(chǔ),協(xié)議是基于Apache?License?v2.0,開源可用于商務(wù),本文給大家介紹下springboot?使用?minio的示例代碼,感興趣的朋友看看吧

什么是MinIo

MinIO 是一個(gè)基于Apache License v2.0開源協(xié)議的對(duì)象存儲(chǔ)服務(wù)。它兼容亞馬遜S3云存儲(chǔ)服務(wù)接口,非常適合于存儲(chǔ)大容量非結(jié)構(gòu)化的數(shù)據(jù),例如圖片、視頻、日志文件、備份數(shù)據(jù)和容器/虛擬機(jī)鏡像等,而一個(gè)對(duì)象文件可以是任意大小,從幾kb到最大5T不等。MinIO是一個(gè)非常輕量的服務(wù),可以很簡(jiǎn)單的和其他應(yīng)用的結(jié)合,類似 NodeJS, Redis 或者 MySQL。

Minio主要用來存儲(chǔ)非結(jié)構(gòu)化的數(shù)據(jù),類似文件,圖片,照片,日志文件,各類備份文件等,按照官網(wǎng)描述,文件的大小從幾KB到5TB。

Minio提供了非常方便,友好的界面,并且文檔也是非常豐富,具體可以參考它的文檔:https://docs.min.io/cn/

為什么選擇MinIo

在之前開發(fā)中曾使用了分布式文件服務(wù)FASTDFS和阿里云的OSS對(duì)象存儲(chǔ)來存儲(chǔ)。奈何OSS太貴,F(xiàn)ASTDFS搭建配置又太繁瑣,今天給大家推薦一款極易上手的高性能對(duì)象存儲(chǔ)服務(wù)MinIo。

MinIO 是高性能的對(duì)象存儲(chǔ),兼容 Amazon S3接口,充分考慮開發(fā)人員的需求和體驗(yàn);支持分布式存儲(chǔ),具備高擴(kuò)展性、高可用性;部署簡(jiǎn)單但功能豐富。官方的文檔也很詳細(xì)。它有多種不同的部署模式(單機(jī)部署,分布式部署)。

為什么說 MinIO 簡(jiǎn)單易用,原因就在于它的啟動(dòng)、運(yùn)行和配置都很簡(jiǎn)單??梢酝ㄟ^ docker 方式進(jìn)行安裝運(yùn)行,也可以下載二進(jìn)制文件,然后使用腳本運(yùn)行。

下面介紹下springboot 使用 minio的詳細(xì)方法,代碼如下所示:

yml 配置
# ====================== ↓↓↓↓↓↓ MinIO文件服務(wù)器 ↓↓↓↓↓↓ ======================
minio:
  url: http://114.67.110.190:9001
  accessKey: minioadmin
  secretKey: minioadmin
  bucketName: zpf

maven:

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

屬性文件:

package com.example.minio;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Data
@Configuration
@ConfigurationProperties(prefix = "minio")
public class MinIoProperties {
    /**
     * minio地址+端口號(hào)
     */
    private String url;
     * minio用戶名
    private String accessKey;
     * minio密碼
    private String secretKey;
     * 文件桶的名稱
    private String bucketName;
}

工具類:

package com.example.minio;

import io.minio.MinioClient;
import io.minio.ObjectStat;
import io.minio.PutObjectOptions;
import io.minio.messages.Bucket;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.net.URLEncoder;
import java.util.List;
@Slf4j
@Component
public class MinIoUtil {
    @Autowired
    MinIoProperties minIoProperties;
    private static MinioClient minioClient;
    /**
     * 初始化minio配置
     *
     * @param :
     * @return: void
     * @date : 2020/8/16 20:56
     */
    @PostConstruct
    public void init() {
        try {
            minioClient = new MinioClient(minIoProperties.getUrl(), minIoProperties.getAccessKey(),
                    minIoProperties.getSecretKey());
            createBucket(minIoProperties.getBucketName());
        } catch (Exception e) {
            e.printStackTrace();
            log.error("初始化minio配置異常: 【{}】", e.fillInStackTrace());
        }
    }
     * 判斷 bucket是否存在
     * @param bucketName:
     *            桶名
     * @return: boolean
     * @date : 2020/8/16 20:53
    @SneakyThrows(Exception.class)
    public static boolean bucketExists(String bucketName) {
        return minioClient.bucketExists(bucketName);
     * 創(chuàng)建 bucket
    public static void createBucket(String bucketName) {
        boolean isExist = minioClient.bucketExists(bucketName);
        if (!isExist) {
            minioClient.makeBucket(bucketName);
     * 獲取全部bucket
     * @return: java.util.List<io.minio.messages.Bucket>
     * @date : 2020/8/16 23:28
    public static List<Bucket> getAllBuckets() {
        return minioClient.listBuckets();
     * 文件上傳
     * @param fileName:
     *            文件名
     * @param filePath:
     *            文件路徑
    public static void upload(String bucketName, String fileName, String filePath) {
        minioClient.putObject(bucketName, fileName, filePath, null);
     * @param stream:
     *            文件流
     * @return: java.lang.String : 文件url地址
     * @date : 2020/8/16 23:40
    public static String upload(String bucketName, String fileName, InputStream stream) {
        minioClient.putObject(bucketName, fileName, stream, new PutObjectOptions(stream.available(), -1));
        return getFileUrl(bucketName, fileName);
     * @param file:
     *            文件
    public static String upload(String bucketName, MultipartFile file) {
        final InputStream is = file.getInputStream();
        final String fileName = file.getOriginalFilename();
        minioClient.putObject(bucketName, fileName, is, new PutObjectOptions(is.available(), -1));
        is.close();
     * 刪除文件
    public static void deleteFile(String bucketName, String fileName) {
        minioClient.removeObject(bucketName, fileName);
     * 下載文件
     * @param response:
     * @date : 2020/8/17 0:34
    public static void download(String bucketName, String fileName, HttpServletResponse response) {
        // 獲取對(duì)象的元數(shù)據(jù)
        final ObjectStat stat = minioClient.statObject(bucketName, fileName);
        response.setContentType(stat.contentType());
        response.setCharacterEncoding("UTF-8");
        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
        InputStream is = minioClient.getObject(bucketName, fileName);
        IOUtils.copy(is, response.getOutputStream());
     * 獲取minio文件的下載地址
     * @return: java.lang.String
     * @date : 2020/8/16 22:07
    public static String getFileUrl(String bucketName, String fileName) {
        return minioClient.presignedGetObject(bucketName, fileName);
}

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

相關(guān)文章

  • Java8 Stream Collectors收集器使用方法解析

    Java8 Stream Collectors收集器使用方法解析

    這篇文章主要介紹了Java8 Stream Collectors收集器使用方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • SpringBoot集成PDFBox實(shí)現(xiàn)電子簽章的代碼詳解

    SpringBoot集成PDFBox實(shí)現(xiàn)電子簽章的代碼詳解

    Apache PDFBox 是一個(gè)開源的 Java 庫,用于處理 PDF 文檔,它提供了一系列強(qiáng)大的功能,包括創(chuàng)建、渲染、拆分、合并、加密、解密 PDF 文件,以及從 PDF 中提取文本和元數(shù)據(jù)等,本文給大家介紹了SpringBoot集成PDFBox實(shí)現(xiàn)電子簽章,需要的朋友可以參考下
    2024-09-09
  • Spring超詳細(xì)講解IOC與解耦合

    Spring超詳細(xì)講解IOC與解耦合

    IoC就是比方說有一個(gè)類,我們想要調(diào)用類里面的方法(不是靜態(tài)方法),就要?jiǎng)?chuàng)建該類的對(duì)象,使用對(duì)象調(diào)用方法來實(shí)現(xiàn)。但對(duì)于Spring來說,Spring創(chuàng)建對(duì)象的過程,不是在代碼里面實(shí)現(xiàn)的,而是交給Spring來進(jìn)行配置實(shí)現(xiàn)的
    2022-08-08
  • SpringMVC域?qū)ο蠊蚕頂?shù)據(jù)示例詳解

    SpringMVC域?qū)ο蠊蚕頂?shù)據(jù)示例詳解

    這篇文章主要為大家介紹了SpringMVC域?qū)ο蠊蚕頂?shù)據(jù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • SVN出現(xiàn)提示org.apache.subversion.javahl.ClientException: Attempted to lock an already-locked dir解決方案

    SVN出現(xiàn)提示org.apache.subversion.javahl.ClientException: Attempt

    這篇文章主要介紹了SVN出現(xiàn)提示org.apache.subversion.javahl.ClientException: Attempted to lock an already-locked dir解決方案的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • spring獲取bean的源碼解析

    spring獲取bean的源碼解析

    這篇文章主要介紹了spring獲取bean的源碼解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • 遠(yuǎn)程debug調(diào)試入門

    遠(yuǎn)程debug調(diào)試入門

    這篇文章主要介紹了Eclipse的Debug調(diào)試技巧大全(總結(jié)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧嗎,希望能給你帶來幫助
    2021-06-06
  • java JVM原理與常識(shí)知識(shí)點(diǎn)

    java JVM原理與常識(shí)知識(shí)點(diǎn)

    在本文中小編給大家分享的是關(guān)于java的JVM原理和java常識(shí),有興趣的朋友們可以學(xué)習(xí)下
    2018-12-12
  • RocketMQ中的NameServer詳細(xì)解析

    RocketMQ中的NameServer詳細(xì)解析

    這篇文章主要介紹了RocketMQ中的NameServer詳細(xì)解析,NameServer是一個(gè)非常簡(jiǎn)單的Topic路由注冊(cè)中心,支持Broker的動(dòng)態(tài)注冊(cè)與發(fā)現(xiàn),因此不能保證NameServer的一致性,需要的朋友可以參考下
    2024-01-01
  • Java?深入理解創(chuàng)建型設(shè)計(jì)模式之原型模式

    Java?深入理解創(chuàng)建型設(shè)計(jì)模式之原型模式

    原型(Prototype)模式的定義如下:用一個(gè)已經(jīng)創(chuàng)建的實(shí)例作為原型,通過復(fù)制該原型對(duì)象來創(chuàng)建一個(gè)和原型相同或相似的新對(duì)象。在這里,原型實(shí)例指定了要?jiǎng)?chuàng)建的對(duì)象的種類。用這種方式創(chuàng)建對(duì)象非常高效,根本無須知道對(duì)象創(chuàng)建的細(xì)節(jié)
    2022-02-02

最新評(píng)論

南丰县| 遂川县| 比如县| 崇明县| 两当县| 翼城县| 三台县| 长治县| 沈丘县| 农安县| 海伦市| 诸城市| 罗田县| 孟州市| 东方市| 宣武区| 昆山市| 平利县| 繁昌县| 峡江县| 昌图县| 金阳县| 台北市| 乐东| 日喀则市| 赤峰市| 贵溪市| 铁岭县| 琼中| 石阡县| 上饶市| 辽中县| 元氏县| 舒兰市| 张家界市| 贵德县| 大兴区| 惠东县| 汪清县| 云安县| 斗六市|