大家好,我是不才陳某~
最近真的被Gitee整廢了,昨天又設定了倉庫不能公開,必須申請開源,稽核通過才能公開
難道這是被約談了?先是部落格園,現在又是Gitee
交流群裡小夥伴也都在埋怨,辛苦搭建的圖床也廢了
有些朋友建議直接使用收費的,比如七牛雲,不過技多不壓身,自己造一個豈不美哉!
今天來安利一個開源免費的物件儲存套件MinIO,自己擼一個免費的儲存系統,順帶實現一個圖床。
什麼是MinIO?
Minio 是個基於 Golang 編寫的開源物件儲存套件,基於Apache License v2.0開源協議,雖然輕量,卻擁有著不錯的效能。它相容亞馬遜S3雲端儲存服務介面。可以很簡單的和其他應用結合使用,例如 NodeJS、Redis、MySQL等。
1. 應用場景
MinIO 的應用場景除了可以作為私有云的物件儲存服務來使用,也可以作為雲物件儲存的閘道器層,無縫對接 Amazon S3
或者 MicroSoft Azure
。
2. 特點
- 高效能:作為一款高效能儲存,在標準硬體條件下,其讀寫速率分別可以達到
55Gb/s
和35Gb/s
。並且MinIO 支援一個物件檔案可以是任意大小,從幾kb到最大5T不等。 - 可擴充套件:不同MinIO叢集可以組成聯邦,並形成一個全域性的名稱空間,並且支援跨越多個資料中心。
- 雲原生:容器化、基於K8S的編排、多租戶支援。
- Amazon S3相容:使用 Amazon S3 v2 / v4 API。可以使用Minio SDK,Minio Client,AWS SDK 和 AWS CLI 訪問Minio伺服器。
SDK支援:
- GO SDK: https://github.com/minio/mini...
- JavaSDK: https://github.com/minio/mini...
- PythonSDK: https://github.com/minio/mini...
- 圖形化介面:有操作頁面
- 支援糾刪碼:MinIO使用糾刪碼、Checksum來防止硬體錯誤和靜默資料汙染。在最高冗餘度配置下,即使丟失1/2的磁碟也能恢復資料。
功能很強大,本文只是拋磚引玉,有興趣的朋友自己去探索吧~
安裝MinIO
安裝非常簡單,筆者這裡使用docker安裝,步驟如下:
1. 獲取映象
執行命令如下:
docker pull minio/minio
2. 啟動映象
執行命令如下:
docker run -p 9000:9000 -p 9001:9001 --name minio -d --restart=always -e "MINIO_ACCESS_KEY=admin" -e "MINIO_SECRET_KEY=admin" -v /home/data:/data -v /home/config:/root/.minio minio/minio server --console-address ":9000" --address ":9001" /data
命令解釋如下:
- -p:9000是圖形介面的埠,9001是API的埠,在使用SDK連線需要用到
- MINIO_ACCESS_KEY:指定圖形介面的使用者名稱
- MINIO_SECRET_KEY:指定圖形介面的密碼
按照上述兩個步驟啟動成功即可。
3. 圖形介面操作
安裝成功後直接訪問地址:http:/ip:9000/login,如下:
輸入使用者名稱和密碼登入成功後,如下:
選單很多,這裡就不再詳細介紹了,筆者這裡直接在Buckets選單中建立一個桶為test,如下圖:
並且設定這個桶的隱私規則為public,如下:
MinIO到此已經安裝設定成功了
Spring Boot 整合MinIO 上傳檔案
雖然MinIO在圖形介面提供了手動上傳的操作,但是也可以通過SDK的方式去上傳,下面介紹一下Spring Boot 整合MinIO上傳檔案。
1. 獲取accessKey和secretKey
這裡的accessKey和secretKey並不是圖形介面登入名和密碼,獲取很簡單,直接在圖形介面中操作,如下圖:
2. 新增依賴
新增MinIO的依賴,如下:
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.2.1</version>
</dependency>
3. 新增配置
這裡筆者對SDK做了簡單的封裝,案例原始碼都會提供,下面只列出部分程式碼。
在aplication.yml配置中新增MInIO相關的配置,如下:
minio:
# 訪問的url
endpoint: http://192.168.47.148
# API的埠
port: 9001
# 祕鑰
accessKey: HQGWFYLWGC6FVJ0CQFOG
secretKey: pUGhAgQhZDxJaLmN3uz65YX7Bb3FyLdLglBvcCr1
secure: false
bucket-name: test # 桶名 我這是給出了一個預設桶名
image-size: 10485760 # 我在這裡設定了 圖片檔案的最大大小
file-size: 1073741824 # 此處是設定了檔案的最大大小
4. 新建上傳檔案介面
筆者這裡定義了一個上傳檔案介面,如下:
/**
* @author 公眾號:碼猿技術專欄
*/
@RequestMapping("/minio")
@RestController
public class MinioController {
@Autowired
private MinioService minioService;
@PostMapping("/upload")
public String uploadFile(MultipartFile file, String bucketName) {
String fileType = FileTypeUtils.getFileType(file);
if (fileType != null) {
return minioService.putObject(file, bucketName, fileType);
}
return "不支援的檔案格式。請確認格式,重新上傳!!!";
}
}
原始碼已經上傳GitHub,關注公眾號:碼猿技術專欄,回覆關鍵詞:9535 獲取!
5. 測試
上述4個步驟已經整合完成了,下面直接呼叫介面上傳一張圖片試一下,如下:
介面返回的URL就是檔案的訪問地址,直接輸入瀏覽器訪問即可。
在MInIO中也可以看到儲存的檔案,如下圖:
如果你需要分享給別人,也可以手動分享,有效期是7天,一旦過了這個有效期將會失效,如下:
原始碼已經上傳GitHub,關注公眾號:碼猿技術專欄,回覆關鍵詞:9535 獲取!
總結
MInIO雖然是個開源專案,但是功能非常強大,小型專案中完全可以用它實現物件儲存,也可以使用MinIO搭建一個免費的圖床。
圖片地址都能直接返回給你了,圖床搭建就不用多說了吧,自己試試吧~
最後說一句(別白嫖,求關注)
陳某每一篇文章都是精心輸出,已經寫了3個專欄,整理成PDF,獲取方式如下:
- 《Spring Cloud 進階》PDF:關注公眾號:【碼猿技術專欄】回覆關鍵詞 Spring Cloud 進階 獲取!
- 《Spring Boot 進階》PDF:關注公眾號:【碼猿技術專欄】回覆關鍵詞 Spring Boot進階 獲取!
- 《Mybatis 進階》PDF:關注公眾號:【碼猿技術專欄】回覆關鍵詞 Mybatis 進階 獲取!
另外陳某的《Spring Cloud Alibaba 實戰》視訊專欄已經殺青了,需要訂閱的點選左下角閱讀原文。