亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

springboot整合minio實(shí)現(xiàn)文件存儲(chǔ)功能

 更新時(shí)間:2023年12月29日 09:03:50   作者:豆豆的java之旅  
MinIO?是一個(gè)基于Apache?License?v2.0開源協(xié)議的對(duì)象存儲(chǔ)服務(wù),它兼容亞馬遜S3云存儲(chǔ)服務(wù)接口,非常適合于存儲(chǔ)大容量非結(jié)構(gòu)化的數(shù)據(jù),本文給大家介紹了springboot整合minio實(shí)現(xiàn)文件存儲(chǔ)功能,文中通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下

一,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對(duì)象存儲(chǔ) Kubernetes — MinIO中文文檔 | MinIO Kubernetes中文文檔 舊一點(diǎn)

MinIO Object Storage for Kubernetes — MinIO Object Storage for Kubernetes

應(yīng)用場(chǎng)景

單主機(jī)單硬盤模式

單主機(jī)多硬盤模式

多主機(jī)多硬盤分布式

特點(diǎn)

· 高性能:作為高性能對(duì)象存儲(chǔ),在標(biāo)準(zhǔn)硬件條件下它能達(dá)到55GB/s的讀、35GB/s的寫速率

· 可擴(kuò)容:不同MinIO集群可以組成聯(lián)邦,并形成一個(gè)全局的命名空間,并跨越多個(gè)數(shù)據(jù)中心

· 云原生:容器化、基于K8S的編排、多租戶支持

· Amazon S3兼容:Minio使用Amazon S3 v2 / v4 API。可以使用Minio SDK,Minio Client,AWS SDK和AWS CLI訪問(wèn)Minio服務(wù)器。

· 可對(duì)接后端存儲(chǔ): 除了Minio自己的文件系統(tǒng),還支持DAS、 JBODs、NAS、Google云存儲(chǔ)和Azure Blob存儲(chǔ)。

· SDK支持: 基于Minio輕量的特點(diǎn),它得到類似Java、Python或Go等語(yǔ)言的sdk支持

· Lambda計(jì)算: Minio服務(wù)器通過(guò)其兼容AWS SNS / SQS的事件通知服務(wù)觸發(fā)Lambda功能。支持的目標(biāo)是消息隊(duì)列,如Kafka,NATS,AMQP,MQTT,Webhooks以及Elasticsearch,Redis,Postgres和MySQL等數(shù)據(jù)庫(kù)。

· 有操作頁(yè)面

· 功能簡(jiǎn)單: 這一設(shè)計(jì)原則讓MinIO不容易出錯(cuò)、更快啟動(dòng)

· 支持糾刪碼:MinIO使用糾刪碼、Checksum來(lái)防止硬件錯(cuò)誤和靜默數(shù)據(jù)污染。在最高冗余度配置下,即使丟失1/2的磁盤也能恢復(fù)數(shù)據(jù)**!**

存儲(chǔ)機(jī)制

Minio使用糾刪碼erasure code和校驗(yàn)和checksum。 即便丟失一半數(shù)量(N/2)的硬盤,仍然可以恢復(fù)數(shù)據(jù)。

糾刪碼是一種恢復(fù)丟失和損壞數(shù)據(jù)的數(shù)學(xué)算法**。**

二,搭建安裝

docker pull minio/minio
新版本: 
docker run \
  -p 9000:9000 \
  -p 9001:9001 \
  --name minio \
  -d --restart=always \
  -e "MINIO_ROOT_USER=admin" \
  -e "MINIO_ROOT_PASSWORD=admin123456" \
  -v /home/data:/data \
  -v /home/config:/root/.minio \
  minio/minio server /data --console-address ":9001"
 
 

瀏覽器訪問(wèn):http://IP:9000/minio/login,如圖:

三,使用

3.1引入依賴

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

3.2創(chuàng)建文件上傳的controller FileController

注意:一些參數(shù)不能寫死,需要寫到配置文件里面進(jìn)行動(dòng)態(tài)讀取

minio:
  endpointUrl: http://192.168.17.166:9000
  accessKey: admin
  secreKey: admin123456
  bucketName: gmall
 
 @RestController
@RequestMapping("/admin/product")
public class FileController {
    //由于參數(shù)不固定,因此需要從配置文件讀取,有兩種方式①@value注解②創(chuàng)建實(shí)體類使用@configurationproperties注解指定前綴注入
    @Value("${minio.endpointUrl}")
    private String endpointUrl; //文件服務(wù)器登錄地址
    @Value("${minio.accessKey}")
    private String accessKey; //用戶名
    @Value("${minio.secreKey}")
    private String secreKey;  //密碼
    @Value("${minio.bucketName}")
    private String bucketName; //儲(chǔ)存桶名稱
 
 
    /**
     * @Description: 上傳圖片到minio文件服務(wù)器
     * @Param: MultipartFile
     * @return:
     * @Author: Mr.Zhan
     * @Date: 2022/3/28  17:59
     */
    @PostMapping("/fileUpload")
    public Result fileUpload(MultipartFile file) {
        String result =null;
        try {
            // 創(chuàng)建minio的客戶端
            MinioClient minioClient =
                    MinioClient.builder()
                            .endpoint(endpointUrl)  //指定文件服務(wù)器地址,用戶名,密碼
                            .credentials(accessKey, secreKey)
                            .build();
 
            // 判斷存儲(chǔ)桶是否存在
            boolean found =
                    minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
            if (!found) {
                // 不存在則創(chuàng)建一個(gè)桶
                minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
            } else {
                throw new GmallException("存儲(chǔ)桶已經(jīng)存在", 20001);
            }
 
            //準(zhǔn)備上傳的圖片名稱
            String fileName = System.currentTimeMillis() + UUID.randomUUID().toString().replaceAll("-", "") + file.getOriginalFilename();
            //使用流上傳文件
            /*
             * ①bucketName 存儲(chǔ)桶名字
             * ②fileName   文件名稱
             * ③ file.getInputStream() 文件流
             * ④file.getSize()文件大小
             * file.getContentType() 文件類型
             * */
            minioClient.putObject(
                    PutObjectArgs.builder().bucket(bucketName).object(fileName).stream(
                            file.getInputStream(), file.getSize(), -1)
                            .contentType(file.getContentType())
                            .build());
            result=endpointUrl + "/" + bucketName + "/" + fileName;
 
            
        } catch (ErrorResponseException e) {
            e.printStackTrace();
        } catch (InsufficientDataException e) {
            e.printStackTrace();
        } catch (InternalException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (InvalidResponseException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (XmlParserException e) {
            e.printStackTrace();
        }
        return Result.ok(result);
    }
}
 

3.3登陸控制臺(tái)設(shè)置桶的狀態(tài)為公開

四,注意

注意:文件上傳時(shí),需要調(diào)整一下linux 服務(wù)器的時(shí)間與windows 時(shí)間一致!
第一步:安裝ntp服務(wù)
yum -y install ntp
 
第二步:開啟開機(jī)啟動(dòng)服務(wù)
systemctl enable ntpd
 
第三步:?jiǎn)?dòng)服務(wù)
systemctl start ntpd
 
第四步:更改時(shí)區(qū)
timedatectl set-timezone Asia/Shanghai
 
第五步:?jiǎn)⒂胣tp同步
timedatectl set-ntp yes
 
第六步:同步時(shí)間
ntpq -p

以上就是springboot整合minio實(shí)現(xiàn)文件存儲(chǔ)功能的詳細(xì)內(nèi)容,更多關(guān)于springboot minio文件存儲(chǔ)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MyBatis insert標(biāo)簽及常用屬性詳解

    MyBatis insert標(biāo)簽及常用屬性詳解

    這篇文章主要介紹了MyBatis insert標(biāo)簽,insert 標(biāo)簽中沒有 resultType 屬性,只有查詢操作才需要對(duì)返回結(jié)果類型進(jìn)行相應(yīng)的指定,需要的朋友可以參考下
    2023-10-10
  • java面向?qū)ο笤O(shè)計(jì)原則之單一職責(zé)與依賴倒置原則詳解

    java面向?qū)ο笤O(shè)計(jì)原則之單一職責(zé)與依賴倒置原則詳解

    這篇文章主要介紹了java面向?qū)ο笤O(shè)計(jì)原則之單一職責(zé)與依賴倒置原則的分析詳解,有需要的朋友可以借鑒參考下,希望可以有所幫助,祝大家多多進(jìn)步早日升職加薪
    2021-10-10
  • Spring Boot 配置隨機(jī)數(shù)的技巧代碼詳解

    Spring Boot 配置隨機(jī)數(shù)的技巧代碼詳解

    這篇文章主要介紹了Spring Boot 配置隨機(jī)數(shù)技巧,spring boot 支持在系統(tǒng)加載的時(shí)候配置隨機(jī)數(shù),具體實(shí)例代碼大家參考下本文
    2018-05-05
  • springboot單元測(cè)試依賴踩坑記錄

    springboot單元測(cè)試依賴踩坑記錄

    這篇文章主要介紹了springboot單元測(cè)試依賴踩坑記錄及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • SpringBoot前端傳遞數(shù)組后端接收兩種常用的方法

    SpringBoot前端傳遞數(shù)組后端接收兩種常用的方法

    這篇文章主要給大家介紹了關(guān)于SpringBoot前端傳遞數(shù)組后端接收兩種常用的方法,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-04-04
  • java模擬實(shí)現(xiàn)微信紅包算法

    java模擬實(shí)現(xiàn)微信紅包算法

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)模擬微信紅包算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • IDEA 2020 本土化,真的是全中文了(真香)

    IDEA 2020 本土化,真的是全中文了(真香)

    去年,JetBrains 網(wǎng)站進(jìn)行了本地化,提供了 8 種不同的語(yǔ)言版本,而現(xiàn)在,團(tuán)隊(duì)正在對(duì)基于 IntelliJ 的 IDE 進(jìn)行本地化
    2020-12-12
  • maven子模塊相互依賴打包時(shí)報(bào)錯(cuò)找不到類的解決方案

    maven子模塊相互依賴打包時(shí)報(bào)錯(cuò)找不到類的解決方案

    本文主要介紹了maven子模塊相互依賴打包時(shí)報(bào)錯(cuò)找不到類的解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Mybatis plus結(jié)合springboot使用

    Mybatis plus結(jié)合springboot使用

    本文主要介紹了MyBatisPlus使用SpringBoot數(shù)據(jù)庫(kù)操作,從添加依賴到測(cè)試,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • springboot3.X 無(wú)法解析parameter參數(shù)問(wèn)題分析

    springboot3.X 無(wú)法解析parameter參數(shù)問(wèn)題分析

    本文介紹了Spring Boot 3.2.1版本中調(diào)用接口時(shí)出現(xiàn)的參數(shù)解析問(wèn)題,該錯(cuò)誤是由Spring新版本加強(qiáng)的錯(cuò)誤校驗(yàn)和報(bào)錯(cuò)提示導(dǎo)致的,在Spring 6.1之后,官方要求URL中的傳參必須使用`@PathVariable`聲明用于接收的變量,而不能省略`@RequestParam`注解,感興趣的朋友一起看看吧
    2025-03-03

最新評(píng)論