SpringBoot 對(duì)象存儲(chǔ) MinIO的詳細(xì)過(guò)程
SpringBoot 對(duì)象存儲(chǔ) MinIO
1.MinIO簡(jiǎn)介
MinIO 是一個(gè)基于 Go 實(shí)現(xiàn)的高性能、兼容 S3 協(xié)議的對(duì)象存儲(chǔ)。它采用 GNU AGPL v3 開源協(xié)議,項(xiàng)目地址是 https://github.com/minio/minio,官網(wǎng)是 https://min.io。
它適合存儲(chǔ)海量的非結(jié)構(gòu)化的數(shù)據(jù),例如說(shuō)圖片、音頻、視頻等常見(jiàn)文件,備份數(shù)據(jù)、容器、虛擬機(jī)鏡像等等,小到 1 KB,大到 5 TB 都可以支持。
國(guó)內(nèi)阿里巴巴、騰訊、百度、華為、中國(guó)移動(dòng)、中國(guó)聯(lián)通等企業(yè)在使用 MinIO,甚至不少商業(yè)公司二次開發(fā) MinIO 來(lái)提供商業(yè)化的云存儲(chǔ)產(chǎn)品。
疑問(wèn):為什么越來(lái)越少使用 FastDFS 實(shí)現(xiàn)文件存儲(chǔ)服務(wù)呢?
部署運(yùn)維復(fù)雜、無(wú)官方文檔、缺乏長(zhǎng)期維護(hù)的團(tuán)隊(duì)、性能較差、未提供 Docker & Kubernetes 集成方案等等原因。
2. MinIO Server 安裝
由于 MinIO 是 Go 寫的,所以就一個(gè)運(yùn)行程序,因此安裝部署 MinIO 就非常簡(jiǎn)單。
2.1 Linux
## 國(guó)外資源,龜速下載 ## /usr/local/minio 存儲(chǔ)目錄;--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.我們定義了一個(gè)名為minio的服務(wù),使用minio/minio鏡像。
2.我們將容器的9000端口映射到主機(jī)的9000端口,
具體來(lái)說(shuō),9001:9000 的格式是 <主機(jī)端口>:<容器端口>。通過(guò)這樣的端口映射,可以在主機(jī)上的 9000 端口訪問(wèn)容器內(nèi)的服務(wù)或應(yīng)用程序。以便能夠通過(guò)主機(jī)訪問(wèn)MinIO。
3.數(shù)據(jù)目錄./data將與容器的/data目錄進(jìn)行掛載,這樣數(shù)據(jù)可以在容器和主機(jī)之間共享。
4.environment部分定義了MinIO的環(huán)境變量。在這個(gè)示例中,我們?cè)O(shè)置了MINIO_ROOT_USER和MINIO_ROOT_PASSWORD來(lái)指定MinIO的根用戶的用戶名和密碼。你可以根據(jù)需要進(jìn)行更改。
5.最后,command部分指定了MinIO容器啟動(dòng)時(shí)運(yùn)行的命令,這里是server /data,它告訴MinIO在/data目錄下存儲(chǔ)數(shù)據(jù)。
將上述內(nèi)容保存到名為docker-compose.yml的文件中,并在該文件所在的目錄中運(yùn)行以下命令啟動(dòng)MinIO容器:
# 后臺(tái)啟動(dòng) docker-compose up -d # docker-compose logs yml里面的服務(wù)id # 查看容器輸出日志 docker-compose logs minio
2.3 訪問(wèn) UI 界面
使用瀏覽器訪問(wèn) http://127.0.0.1:9001 地址,訪問(wèn) MinIO 內(nèi)置的 UI 界面。
輸入賬號(hào) admin,密碼 admin123進(jìn)行登錄,成功進(jìn)入首頁(yè)。

2.4 新建存儲(chǔ)桶
點(diǎn)擊 [Create Bucket] 按鈕,新建一個(gè) Bucket 存儲(chǔ)桶,用于稍后文件的上傳。

2.5 添加 readonly 訪問(wèn)規(guī)則
默認(rèn)配置下,訪問(wèn)存儲(chǔ)桶是需要請(qǐng)求授權(quán)的。但是在實(shí)際場(chǎng)景下,我們往往希望允許直接訪問(wèn),此時(shí)就需要添加一條 readonly 訪問(wèn)規(guī)則。
① 點(diǎn)擊右上角的 [Configure Bucket] 設(shè)置圖標(biāo),然后選擇 [Access Rules] 菜單。

2.6 上傳文件
點(diǎn)擊 [Upload] 按鈕,點(diǎn)擊 [Upload File] 選項(xiàng),選擇一個(gè)圖片上傳。

2.7 訪問(wèn)文件
文件的訪問(wèn)地址的格式為 <http://127.0.0.1:9000/{bucket}/{name}>,注意是 9000 端口。
我們剛上傳的文件 {bucket} 是 llp,{name} 是 123.png,所以最終的訪問(wèn)路徑是 http://127.0.0.1:9000/llp/123.png。
3.Springboot整合minio
3.1引入依賴
<dependencies> <!-- 實(shí)現(xiàn)對(duì) Spring MVC 的自動(dòng)化配置 --> <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訪問(wèn)地址
endpoint: http://192.168.233.202:9000
# 創(chuàng)建的桶名
bucket: llp
# minio賬戶名
accessKey: admin
# minio賬戶密碼
secretKey: admin123
spring:
servlet:
# 文件上傳相關(guān)配置項(xiàng)
multipart:
max-file-size: 16MB # 單個(gè)文件大小
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;
}
}測(cè)試類
@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 隨機(jī)
minioClient.putObject(PutObjectArgs.builder()
.bucket(MinioProperties.BUCKET) // 存儲(chǔ)桶
.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) // 存儲(chǔ)桶
.object(path) // 文件名
.build());
return "success";
}
}4.測(cè)試
文件上傳測(cè)試

上傳成功后,我們獲得了文件的訪問(wèn) URL 地址,可以使用瀏覽器直接訪問(wèn)。
http://192.168.233.202:9000/llp/8028e9c9-8b22-4a57-bcdc-74eb96a585da

同時(shí)在minio后臺(tái)也可以看到上傳的文件

文件刪除測(cè)試

到此這篇關(guān)于SpringBoot 對(duì)象存儲(chǔ) MinIO的文章就介紹到這了,更多相關(guān)SpringBoot 對(duì)象存儲(chǔ)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一文總結(jié) Shiro 實(shí)戰(zhàn)教程
shiro是apache的一個(gè)開源框架,是一個(gè)權(quán)限管理的框架,實(shí)現(xiàn) 用戶認(rèn)證、用戶授權(quán),這篇文章詳細(xì)總結(jié)了shiro用法,感興趣的同學(xué)可以參考閱讀2023-04-04
java正則表達(dá)式獲取指定HTML標(biāo)簽的指定屬性值且替換的方法
下面小編就為大家?guī)?lái)一篇java正則表達(dá)式獲取指定HTML標(biāo)簽的指定屬性值且替換的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12
Java實(shí)現(xiàn)手寫一個(gè)線程池的示例代碼
線程池技術(shù)想必大家都不陌生把,相信在平時(shí)的工作中沒(méi)有少用,而且這也是面試頻率非常高的一個(gè)知識(shí)點(diǎn),那么大家知道它的實(shí)現(xiàn)原理和細(xì)節(jié)嗎?本文就來(lái)通過(guò)手寫一個(gè)簡(jiǎn)單的線程池框架,去掌握線程池的基本原理,感興趣的可以學(xué)習(xí)一下2022-10-10
Mybatis中typeAliases標(biāo)簽和package標(biāo)簽使用
這篇文章主要介紹了Mybatis中typeAliases標(biāo)簽和package標(biāo)簽使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
Java GUI圖形界面開發(fā)實(shí)現(xiàn)小型計(jì)算器流程詳解
本文章向大家介紹Java GUI圖形界面開發(fā)實(shí)現(xiàn)小型計(jì)算器,主要包括布局管理器使用實(shí)例、應(yīng)用技巧、基本知識(shí)點(diǎn)總結(jié)和需要注意事項(xiàng),具有一定的參考價(jià)值,需要的朋友可以參考一下2022-08-08
Jenkins自動(dòng)部署SpringBoot項(xiàng)目實(shí)踐教程
這篇文章主要介紹了Jenkins自動(dòng)部署SpringBoot項(xiàng)目實(shí)踐教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11

