一、MinIO簡介
- MinIO基于Apache License v2.0開源協議的物件存盤服務,可以做為云存盤的解決方案用來保存海量的圖片,視頻,檔案,由于采用Golang實作,服務端可以作業Windows,Linux, OS X和FreeBSD上,配置簡單,基本是復制可執行程式,單行命令可以運行起來
- MinIO兼容亞馬遜S3云存盤服務介面,非常適合于存盤大容量非結構化的資料,例如圖片、視頻、日志檔案、備份資料和容器/虛擬機鏡像等,而一個物件檔案可以是任意大小,從幾kb到最大5T不等
- S3 ( Simple Storage Service簡單存盤服務)
- 基本概念
- bucket - 類比于檔案系統的目錄
- Object - 類比檔案系統的檔案
- Keys - 類比檔案名
- 基本概念
- 官方檔案
- http://docs.minio.org.cn/docs/
二、MinIO特點
2.1、資料保護
- MinIO使用Minio Erasure Code(糾刪碼)來防止硬體故障;及時損壞一半以上的driver,但是仍然可以從中恢復
2.2、高性能
- 最為高性能物件存盤,在標準硬體條件下它能達到55GB/s的讀、35GB/s的寫速率
2.3、可擴容
- 不同MinIO集群可以組成聯邦,并形成一個全域的命名空間,并跨越多個資料中心
2.4、SDK支持
- 基于Minio清涼的特點,它得到類似Java、Python或Go等語言的SDK支持
2.5、良好的操作頁面
- 面向用戶友好的簡單操作界面,非常方便的管理Bucket及里面的檔案資源
2.6、功能簡單
- 這一設計原則讓Minio不容器出錯,更快啟動
2.7、API豐富
- 支持檔案資源的分享鏈接以及分享鏈接的過期策略、存盤桶操作、檔案串列訪問及檔案上傳的基本下載功能等
2.8、檔案變化主動通知
- 存盤桶(Bucket)如果發生改變,比如上傳物件和洗掉物件,可以使用存盤桶事件通知機制進行監控,并通過以下方式發布出去:AMQP、MQTT、Elasticsearch、Redis、NATS、MySQL、Kafka、Webhooks
三、MinIO容器安裝
關于Minio使用可以參考官方檔案: http://docs.minio.org.cn/docs/
3.1、鏡像拉取
docker pull minio- 如果報錯顯示找不到
minio安裝軟體的話,換一個倉庫;或者直接去docker官網搜索并下載minio鏡像然后拉取到虛擬機即可
3.2、創建容器
- 使用Docker進行環境部署和啟動
-
docker run -i -d \ -p 9000:9000 \ -p 9001:9001 \ --name minio-leadnews \ --privileged=true \ -v /etc/localtime:/etc/localtime \ -v ~/minio/data:/data \ -e "MINIO_ROOT_USER=minio" \ -e "MINIO_ROOT_PASSWORD=minio123" \ minio server /data --console-address ":9001"
-
3.3、登錄minio
-
安裝好后,瀏覽器訪問:http://宿主機IP:9001,輸入賬號密碼即可登錄
-

-

3.3、創建桶
-
點擊右上角的
Create Bucket可以創建桶 -

3.4、權限管理
-
桶創建好后,需要對該桶進行權限設定,否則外部無法訪問,如下所示
-

-

-

-

3.5、新建路徑
-
進入桶界面(點擊
Browse),創建新路徑 -
如果所有檔案都存盤到shop下,不容易區分,我們可以根據不同檔案,創建不同目錄,例如
shop/items/存盤所有商品靜態頁,多級路徑創建 -

3.6、上傳圖片
-

-
瀏覽器訪問
四、MinIO快速入門
4.1、創建工程
-
創建minio-demo工程,對于pom如下所示
-
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.coolman</groupId> <artifactId>minio-demo</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <dependencies> <!--minio依賴--> <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.3.3</version> </dependency> <!--spring boot starter--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.5.6</version> </dependency> <!--spring boot test--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <version>2.5.6</version> </dependency> </dependencies> </project
-
-
啟動類
-
package com.coolman.minio; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class MinioApplication { public static void main(String[] args) { SpringApplication.run(MinioApplication.class, args); } }
-
4.2、撰寫測驗代碼
-
package com.coolman.minio; import io.minio.MinioClient; import io.minio.PutObjectArgs; import io.minio.RemoveBucketArgs; import io.minio.RemoveObjectArgs; import io.minio.errors.*; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import java.io.FileInputStream; @SpringBootTest public class MinioTest { /** * 上傳html測驗 */ @Test public void testUpload() { // 1. 讀取本地檔案 try { FileInputStream fileInputStream = new FileInputStream("E:\\系統默認\\桌面\\news-init\\freemarker-demo\\src\\main\\resources\\testHtml\\HelloFreemarker.html"); // 2. 創建minio客戶端 MinioClient client = MinioClient.builder() .credentials("minio", "minio123") // 登錄憑證 .endpoint("http:/192.168.222.135:9000") // minio鏈接地址 .build(); // 3. 上傳 PutObjectArgs putObjectArgs = PutObjectArgs.builder() .object("/2022/07/28/test.html") // 指定檔案名稱 .bucket("test") // 桶名稱 .contentType("text/html") // 檔案型別 // arg1:指定檔案流,arg2:檔案流的有效長度,arg3:partSize=-1表示自動識別檔案長度 .stream(fileInputStream, fileInputStream.available(), -1) .build(); client.putObject(putObjectArgs); // 完成上傳 } catch (Exception e) { e.printStackTrace(); } } /** * 洗掉html測驗 */ @Test public void testDelete() { try { // 1. 創建minio客戶端 MinioClient client = MinioClient.builder() .credentials("minio", "minio123") // 登錄憑證 .endpoint("http:/192.168.222.135:9000") // minio鏈接地址 .build(); // 2. 洗掉 RemoveObjectArgs removeObjectArgs = RemoveObjectArgs.builder() .object("/2022/07/28/test.html") // 指定檔案名稱 .bucket("test") // 桶名稱 .build(); client.removeObject(removeObjectArgs); // 完成洗掉 } catch (Exception e) { e.printStackTrace(); } } }
4.3、運行效果
- 瀏覽器訪問,效果如下所示
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/501042.html
標籤:Java
上一篇:02-專案實作讀寫分離


