SpringBoot 對象存儲 MinIO的詳細過程
SpringBoot 對象存儲 MinIO
1.MinIO簡介
MinIO 是一個基于 Go 實現(xiàn)的高性能、兼容 S3 協(xié)議的對象存儲。它采用 GNU AGPL v3 開源協(xié)議,項目地址是 https://github.com/minio/minio,官網(wǎng)是 https://min.io。
它適合存儲海量的非結(jié)構(gòu)化的數(shù)據(jù),例如說圖片、音頻、視頻等常見文件,備份數(shù)據(jù)、容器、虛擬機鏡像等等,小到 1 KB,大到 5 TB 都可以支持。
國內(nèi)阿里巴巴、騰訊、百度、華為、中國移動、中國聯(lián)通等企業(yè)在使用 MinIO,甚至不少商業(yè)公司二次開發(fā) MinIO 來提供商業(yè)化的云存儲產(chǎn)品。
疑問:為什么越來越少使用 FastDFS 實現(xiàn)文件存儲服務(wù)呢?
部署運維復雜、無官方文檔、缺乏長期維護的團隊、性能較差、未提供 Docker & Kubernetes 集成方案等等原因。
2. MinIO Server 安裝
由于 MinIO 是 Go 寫的,所以就一個運行程序,因此安裝部署 MinIO 就非常簡單。
2.1 Linux
## 國外資源,龜速下載 ## /usr/local/minio 存儲目錄;--console-address 是 UI 界面的端口 wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod +x minio MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=admin123 ./minio server /usr/local/minio --console-address ":9001"
2.2Docker
Linux 或 MacOS:
cd /usr/local/mkdir minio
vi dockercompose.yml
創(chuàng)建dockercompose.yml文件,填寫內(nèi)容如下
version: '3' services: minio: image: minio/minio container_name: myminio ports: - "9001:9000" volumes: - /usr/local/minio/data:/data - /usr/local/minio/config:/root/.minio environment: MINIO_ROOT_USER: "admin" MINIO_ROOT_PASSWORD: "admin123" command: server /data restart: always
在上面的示例中,
1.我們定義了一個名為minio
的服務(wù),使用minio/minio
鏡像。
2.我們將容器的9000端口映射到主機的9000端口,
具體來說,9001:9000
的格式是 <主機端口>:<容器端口>
。通過這樣的端口映射,可以在主機上的 9000 端口訪問容器內(nèi)的服務(wù)或應(yīng)用程序。以便能夠通過主機訪問MinIO。
3.數(shù)據(jù)目錄./data
將與容器的/data
目錄進行掛載,這樣數(shù)據(jù)可以在容器和主機之間共享。
4.environment
部分定義了MinIO的環(huán)境變量。在這個示例中,我們設(shè)置了MINIO_ROOT_USER
和MINIO_ROOT_PASSWORD
來指定MinIO的根用戶的用戶名和密碼。你可以根據(jù)需要進行更改。
5.最后,command
部分指定了MinIO容器啟動時運行的命令,這里是server /data
,它告訴MinIO在/data
目錄下存儲數(shù)據(jù)。
將上述內(nèi)容保存到名為docker-compose.yml
的文件中,并在該文件所在的目錄中運行以下命令啟動MinIO容器:
# 后臺啟動 docker-compose up -d # docker-compose logs yml里面的服務(wù)id # 查看容器輸出日志 docker-compose logs minio
2.3 訪問 UI 界面
使用瀏覽器訪問 http://127.0.0.1:9001 地址,訪問 MinIO 內(nèi)置的 UI 界面。
輸入賬號 admin,密碼 admin123進行登錄,成功進入首頁。
2.4 新建存儲桶
點擊 [Create Bucket] 按鈕,新建一個 Bucket 存儲桶,用于稍后文件的上傳。
2.5 添加 readonly 訪問規(guī)則
默認配置下,訪問存儲桶是需要請求授權(quán)的。但是在實際場景下,我們往往希望允許直接訪問,此時就需要添加一條 readonly 訪問規(guī)則。
① 點擊右上角的 [Configure Bucket] 設(shè)置圖標,然后選擇 [Access Rules] 菜單。
2.6 上傳文件
點擊 [Upload] 按鈕,點擊 [Upload File] 選項,選擇一個圖片上傳。
2.7 訪問文件
文件的訪問地址的格式為 <http://127.0.0.1:9000/{bucket}/{name}>
,注意是 9000 端口。
我們剛上傳的文件 {bucket}
是 llp,{name}
是 123.png,所以最終的訪問路徑是 http://127.0.0.1:9000/llp/123.png。
3.Springboot整合minio
3.1引入依賴
<dependencies> <!-- 實現(xiàn)對 Spring MVC 的自動化配置 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- MinIO 客戶端 --> <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.2.2</version> </dependency> </dependencies>
3.2 Minio配置類
import io.minio.MinioClient; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MinIOConfiguration { /** * Minio 配置 * @return */ @Bean public MinioClient minioClient() { // 創(chuàng)建 MinioClient 客戶端 return MinioClient.builder() .endpoint(MinioProperties.ENDPOINT) .credentials(MinioProperties.ACCESS_KEY, MinioProperties.SECRET_KEY) .build(); } }
application.yml
minio: # minio訪問地址 endpoint: http://192.168.233.202:9000 # 創(chuàng)建的桶名 bucket: llp # minio賬戶名 accessKey: admin # minio賬戶密碼 secretKey: admin123 spring: servlet: # 文件上傳相關(guān)配置項 multipart: max-file-size: 16MB # 單個文件大小 max-request-size: 32MB # 設(shè)置總上傳的文件大小
MinioProperties
讀取yml配置
import lombok.Data; import org.springframework.beans.factory.InitializingBean; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Data @Component @ConfigurationProperties(value = "minio") public class MinioProperties implements InitializingBean { private String endpoint; private String bucket; private String accessKey; private String secretKey; public static String ENDPOINT; public static String BUCKET; public static String ACCESS_KEY; public static String SECRET_KEY; @Override public void afterPropertiesSet() throws Exception { ENDPOINT = endpoint; BUCKET = bucket; SECRET_KEY = secretKey; ACCESS_KEY = accessKey; } }
測試類
@RestController @RequestMapping("/file") public class FileController { @Resource private MinioClient minioClient; /** * 上傳文件 */ @PostMapping("/upload") public String upload(@RequestParam("file") MultipartFile file) throws Exception { // 上傳 String path = UUID.randomUUID().toString(); // 文件名,使用 UUID 隨機 minioClient.putObject(PutObjectArgs.builder() .bucket(MinioProperties.BUCKET) // 存儲桶 .object(path) // 文件名 .stream(file.getInputStream(), file.getSize(), -1) // 文件內(nèi)容 .contentType(file.getContentType()) // 文件類型 .build()); // 拼接路徑 return String.format("%s/%s/%s", MinioProperties.ENDPOINT, MinioProperties.BUCKET, path); } /** * 刪除文件 */ @DeleteMapping("/delete") public String delete(@RequestParam("path") String path) throws Exception { minioClient.removeObject(RemoveObjectArgs.builder() .bucket(MinioProperties.BUCKET) // 存儲桶 .object(path) // 文件名 .build()); return "success"; } }
4.測試
文件上傳測試
上傳成功后,我們獲得了文件的訪問 URL 地址,可以使用瀏覽器直接訪問。
http://192.168.233.202:9000/llp/8028e9c9-8b22-4a57-bcdc-74eb96a585da
同時在minio后臺也可以看到上傳的文件
文件刪除測試
到此這篇關(guān)于SpringBoot 對象存儲 MinIO的文章就介紹到這了,更多相關(guān)SpringBoot 對象存儲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java正則表達式獲取指定HTML標簽的指定屬性值且替換的方法
下面小編就為大家?guī)硪黄猨ava正則表達式獲取指定HTML標簽的指定屬性值且替換的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12Mybatis中typeAliases標簽和package標簽使用
這篇文章主要介紹了Mybatis中typeAliases標簽和package標簽使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09Java GUI圖形界面開發(fā)實現(xiàn)小型計算器流程詳解
本文章向大家介紹Java GUI圖形界面開發(fā)實現(xiàn)小型計算器,主要包括布局管理器使用實例、應(yīng)用技巧、基本知識點總結(jié)和需要注意事項,具有一定的參考價值,需要的朋友可以參考一下2022-08-08