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

使用Java Minio搭建自己的文件系統(tǒng)詳解

 更新時(shí)間:2021年09月14日 10:43:34   作者:魚小洲  
這篇文章主要介紹了使用Java Minio搭建自己的文件系統(tǒng)的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

前言

最近接了一個(gè)項(xiàng)目,甲方不愿意買服務(wù)器,但是呢,項(xiàng)目又必須要用文件功能。所以很巧,最近又剛好看到了Minio這個(gè)牛逼的工具。正好借此機(jī)會(huì)記錄下來此次操作的全部流程。

本次涉及到的功能有:

  • Minio的安裝與啟動(dòng)
  • 控制臺(tái)的使用以及存儲(chǔ)桶的創(chuàng)建
  • 存儲(chǔ)桶的使用權(quán)限說明
  • 使用控制臺(tái)實(shí)現(xiàn)文件上傳與下載
  • (重點(diǎn))使用Springboot與Minio整合實(shí)現(xiàn)文件的增刪改查

本次使用環(huán)境:Centos7.6+finalshell+java

1、Minio介紹

如果你聽過這個(gè),那么你直接跳到第二小節(jié)看使用說明。如果你不知道這個(gè),但是你最近也正在找一款文件存儲(chǔ)的工具,那么你可以先看看這個(gè)的介紹。

Minio 是一個(gè)基于Go語言的對(duì)象存儲(chǔ)服務(wù)。它實(shí)現(xiàn)了大部分亞馬遜S3云存儲(chǔ)服務(wù)接口,可以看做是是S3的開源版本,非常適合于存儲(chǔ)大容量非結(jié)構(gòu)化的數(shù)據(jù),例如圖片、視頻、日志文件、備份數(shù)據(jù)和容器/虛擬機(jī)鏡像等,而一個(gè)對(duì)象文件可以是任意大小,從幾kb到最大5T不等。區(qū)別于分布式存儲(chǔ)系統(tǒng),minio的特色在于簡單、輕量級(jí),對(duì)開發(fā)者友好。

阿里云對(duì)象存儲(chǔ)你應(yīng)該清楚,這個(gè)和OSS的區(qū)別就是,OSS收費(fèi),這個(gè)是你自己搭建的,不收費(fèi),只占磁盤大小。其他的功能都是一毛一樣的。

2、Minio安裝與啟動(dòng)

首先,我們得先去找到下載地址

  • 下載地址:https://dl.min.io/server/minio/release/linux-amd64/minio

使用我們的終端工具連接上我們的服務(wù)器。

步驟:

1.找一個(gè)目錄,用來存放我們的minio文件

2.使用wget命令,通過下載地址下載下載我們的文件

 wget https://dl.min.io/server/minio/release/linux-amd64/minio

3.給minio這個(gè)文件賦予權(quán)限,作為文件啟動(dòng)

chmod +x minio

4.使用./minio server start啟動(dòng)

在這里插入圖片描述

當(dāng)你能看到這個(gè)界面的時(shí)候,說明你就成功了。

小提示1:
下面的兩個(gè)紅色的并不是報(bào)錯(cuò),而是警告,也可以是一個(gè)建議。
第一句翻譯:控制臺(tái)斷點(diǎn)的偵聽端口并不是固定的,請(qǐng)使用 --console-address指定端口啟動(dòng)
第二句翻譯:默認(rèn)初始憑證賬號(hào)和密碼是minioadmin和minioadmin 你可以在環(huán)境變量中去更改他。但是我這兒就不修改了,如果你想修改你可以去profile下面使用export命名來加上他說的那個(gè)變量名來指定賬號(hào)和密碼。
小提示2:
如果你是本地虛擬機(jī),啟動(dòng)后只需要使用ip:9000端口來實(shí)現(xiàn)訪問,如果訪問不了,請(qǐng)關(guān)掉防火墻,命令:
systemctl stop firewalld
如果你是云服務(wù)器,請(qǐng)放行9000端口和他提示出來的端口。9000作為API端口是不變的,但是你同樣可以指定修改他,控制臺(tái)端口經(jīng)過我自己測試,他每次啟動(dòng)都會(huì)發(fā)生改變,所以我們還是建議使用指定端口啟動(dòng)。
小提示3:
我們上面的啟動(dòng)命令,他啟動(dòng)好了之后日志可以指定到目錄去存儲(chǔ),只需要將./minio server start 命令更換成 ./minio server /home/minio/data 其中/home/minio/data是我自己定義的目錄,你可以隨便定義。
第二:啟動(dòng)后會(huì)占用控制臺(tái),我們也可以將他調(diào)整成為后臺(tái)啟動(dòng),加上指定的端口,我們就可以完成自定義的設(shè)置。具體啟動(dòng)命令如下:
nohup ./minio server --console-address ':41169' /home/minio/data/ > /home/minio/data/minio.log 2>&1 &
意思就是,指定控制臺(tái)端口為41169,并且生成日志文件到/home/minio/data目錄下的minio.log中

訪問ip:9000進(jìn)入登錄界面 使用默認(rèn)賬號(hào)進(jìn)行登錄

在這里插入圖片描述

在這里插入圖片描述

3、Minio控制臺(tái)創(chuàng)建存儲(chǔ)桶

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

這樣就創(chuàng)建好了我們的存儲(chǔ)桶。

4、存儲(chǔ)桶權(quán)限

在創(chuàng)建好存儲(chǔ)桶之后,我們?yōu)榱耸褂眠h(yuǎn)程連接來訪問使用。所以有必要去修改一下存儲(chǔ)桶的權(quán)限。

在這里插入圖片描述

我們點(diǎn)擊最下面的那個(gè)Rules,然后點(diǎn)擊右上角創(chuàng)建一個(gè)訪問規(guī)則??梢允褂镁珳?zhǔn)匹配,也可以使用通配符。

在這里插入圖片描述

前綴我們使用* 這樣可以匹配全部訪問用戶,下面的權(quán)限我們使用讀寫。

5、控制臺(tái)實(shí)現(xiàn)文件的上傳與下載

在這里插入圖片描述

我們點(diǎn)到左邊的功能欄,然后選擇右邊我們剛創(chuàng)建的存儲(chǔ)桶。然后,,我覺得接下來的操作我都不用細(xì)說你們應(yīng)該都會(huì)玩了。

在這里插入圖片描述

在這里插入圖片描述

同樣,在上傳成功后,也提供下載與預(yù)覽功能。

6、使用Springboot與Minio整合實(shí)現(xiàn)文件的增刪查改

6.1、創(chuàng)建項(xiàng)目

6.2、添加依賴

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

6.3、創(chuàng)建自定義屬性與配置類

minio:
  accesskey: minioadmin
  secretkey: minioadmin
  url: http://ip:9000
  bucketname: zxy-images
@Component
@Data
public class MinioProperties {
    /**
     * API調(diào)用地址
     */
    @Value("${minio.url}")
    private String url;
    /**
     * 連接賬號(hào)
     */
    @Value("${minio.accesskey}")
    private String accessKey;
    /**
     * 連接秘鑰
     */
    @Value("${minio.secretkey}")
    private String secretKey;
}
@Configuration
@Slf4j
public class MinioConfig {
    @Resource
    private MinioProperties minioProperties;
    @Bean
    public MinioClient getMinioClient(){
        try {
            return new MinioClient(minioProperties.getUrl(), minioProperties.getAccessKey(), minioProperties.getSecretKey());
        } catch (InvalidEndpointException | InvalidPortException e) {
            e.printStackTrace();
            log.info("-----創(chuàng)建Minio客戶端失敗-----");
            return null;
        }
    }
}

6.4、功能實(shí)現(xiàn)

6.4.1、文件上傳

public void upload(MultipartFile file) throws IOException, XmlPullParserException, NoSuchAlgorithmException, InvalidKeyException, InvalidArgumentException, InvalidResponseException, InternalException, NoResponseException, InvalidBucketNameException, InsufficientDataException, ErrorResponseException {
        if (file == null || file.getSize() == 0 || file.isEmpty()) {
            throw new RuntimeException("上傳文件為空,請(qǐng)重新上傳");
        }
        // 獲取文件名
        String filename = file.getOriginalFilename();
        assert filename != null;
        /* 像下面這樣寫最主要是為了用來做分割,同時(shí)也保證文件名是唯一的 */
        String newFilename = UUID.randomUUID().toString() + "|" + filename + filename.substring(filename.lastIndexOf("."));
        minioClient.putObject(bucketName, newFilename, file.getInputStream(), file.getSize(), null, null, file.getContentType());
    }

6.4.2、文件下載

public InputStream download(String fileName, HttpServletResponse response) {
        InputStream inputStream = null;
        // 根據(jù)文件名拿到minio中的文件對(duì)象
        try {
            ObjectStat object = minioClient.statObject(bucketName, fileName);
            // 設(shè)置響應(yīng)頭類型
            response.setContentType(object.contentType());
            inputStream = minioClient.getObject(bucketName, fileName);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return inputStream;
    }

6.4.3、查詢?nèi)课募?/h4>
public Iterable<Result<Item>> listObjects() {
        try {
            return minioClient.listObjects(bucketName);
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        }
        return null;
    }

6.4.4、刪除指定文件

public void deleteFile(String fileName){
        try {
            minioClient.removeObject(bucketName,fileName);
        } catch (Exception e) {
            e.printStackTrace();
        } 
    }

總結(jié)

其實(shí)操作并不難,你如果發(fā)現(xiàn)了我的操作全都是使用的minioClient來實(shí)現(xiàn)的時(shí)候,你的重心就應(yīng)該去放在這個(gè)類上面,里面所有的方法都有注釋,看一遍就能學(xué)會(huì)。

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • Java面試為何阿里強(qiáng)制要求不在foreach里執(zhí)行刪除操作

    Java面試為何阿里強(qiáng)制要求不在foreach里執(zhí)行刪除操作

    那天,小二去阿里面試,面試官老王一上來就甩給了他一道面試題:為什么阿里的 Java 開發(fā)手冊(cè)里會(huì)強(qiáng)制不要在 foreach 里進(jìn)行元素的刪除操作
    2021-11-11
  • 解決mybatis-plus-boot-starter與mybatis-spring-boot-starter的錯(cuò)誤問題

    解決mybatis-plus-boot-starter與mybatis-spring-boot-starter的錯(cuò)誤問題

    本文主要講述了在使用MyBatis和MyBatis-Plus時(shí)遇到的綁定異常問題,通過排查和總結(jié),作者發(fā)現(xiàn)使用MyBatis-Plus?Boot?Starter可以解決這個(gè)問題,文章詳細(xì)對(duì)比了MyBatis-Plus?Boot?Starter和MyBatis?Spring?Boot?Starter的功能和使用場景
    2025-01-01
  • Java 中的注解詳解及示例代碼

    Java 中的注解詳解及示例代碼

    本文主要介紹Java 中的注解,這里提供了詳細(xì)的相關(guān)資料,及示例代碼,幫助大家學(xué)習(xí)理解,有興趣的小伙伴可以參考下
    2016-08-08
  • Java 負(fù)載均衡的 5 種算法實(shí)現(xiàn)原理

    Java 負(fù)載均衡的 5 種算法實(shí)現(xiàn)原理

    這篇文章主要介紹Java 負(fù)載均衡的 5 種算法實(shí)現(xiàn)原理,負(fù)載均衡能夠平均分配客戶請(qǐng)求到服 務(wù)器陣列,借此提供快速獲取重要數(shù)據(jù),解決大量并發(fā)訪問服務(wù)問題,這種集群技術(shù)可以用最少的投資獲得接近于大型主機(jī)的性能。下面就來看看文章的具體內(nèi)容吧
    2021-10-10
  • Java長字符串加密的實(shí)現(xiàn)

    Java長字符串加密的實(shí)現(xiàn)

    在Java中,字符串是一種常見的數(shù)據(jù)類型,我們經(jīng)常需要對(duì)其進(jìn)行加密和解密,本文主要介紹了Java長字符串加密的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • Java實(shí)現(xiàn)多對(duì)多網(wǎng)絡(luò)通訊的流程

    Java實(shí)現(xiàn)多對(duì)多網(wǎng)絡(luò)通訊的流程

    這篇文章主要介紹了Java實(shí)現(xiàn)多對(duì)多網(wǎng)絡(luò)通訊的流程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • 實(shí)現(xiàn)一個(gè)規(guī)則引擎的可視化具體方案

    實(shí)現(xiàn)一個(gè)規(guī)則引擎的可視化具體方案

    項(xiàng)目原因需要用到規(guī)則引擎,但是發(fā)現(xiàn)大部分不可以自由的進(jìn)行規(guī)則定義,通過不斷嘗試變換關(guān)鍵字在搜索引擎搜索,最終在stackoverflow找到了一個(gè)探討這個(gè)問題的帖子,特此將帖子中提到的方案分享一下,如果你跟我一樣在研究同樣的問題,也許對(duì)你有用
    2021-04-04
  • Java 實(shí)現(xiàn)限流器處理Rest接口請(qǐng)求詳解流程

    Java 實(shí)現(xiàn)限流器處理Rest接口請(qǐng)求詳解流程

    在工作中是否會(huì)碰到這樣的場景,高并發(fā)的請(qǐng)求但是無法全部執(zhí)行,需要一定的限流。如果你是使用的微服務(wù)框架,比如SpringCloud,可以使用Gateway增加限流策略來解決。本篇文章是在沒有框架的情況實(shí)現(xiàn)限流器
    2021-11-11
  • SpringBoot整合Sa-Token實(shí)現(xiàn)?API?接口簽名安全校驗(yàn)功能

    SpringBoot整合Sa-Token實(shí)現(xiàn)?API?接口簽名安全校驗(yàn)功能

    這篇文章主要介紹了SpringBoot整合Sa-Token實(shí)現(xiàn)?API?接口簽名安全校驗(yàn)功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • 如何查看java進(jìn)程內(nèi)存占用情況

    如何查看java進(jìn)程內(nèi)存占用情況

    這篇文章主要介紹了如何查看java進(jìn)程內(nèi)存占用情況問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12

最新評(píng)論

盘山县| 独山县| 海林市| 浑源县| 山阳县| 平武县| 东明县| 乌拉特后旗| 安达市| 绿春县| 钟山县| 肃北| 泉州市| 通道| 高青县| 海安县| 临沂市| 定兴县| 丹寨县| 保定市| 四平市| 饶河县| 马山县| 清远市| 丹寨县| 同德县| 乾安县| 信阳市| 新兴县| 洛川县| 苏尼特左旗| 汉川市| 德化县| 分宜县| 稻城县| 渭南市| 新密市| 华安县| 平顺县| 周至县| 赫章县|