SpringBoot 2.x 開發案例之整合MinIo檔案服務
在之前的圖床開發中曾使用了分散式檔案服務FASTDFS和阿里雲的OSS物件儲存來儲存妹子圖。奈何OSS太貴,FASTDFS搭建配置又太繁瑣,今天給大家推薦一款極易上手的高效能物件儲存服務MinIO。
簡介
MinIO 是高效能的物件儲存,相容 Amazon S3介面,充分考慮開發人員的需求和體驗;支援分散式儲存,具備高擴充套件性、高可用性;部署簡單但功能豐富。官方的文件也很詳細。它有多種不同的部署模式(單機部署,分散式部署)。
為什麼說 MinIO 簡單易用,原因就在於它的啟動、執行和配置都很簡單。可以透過 docker 方式進行安裝執行,也可以下載二進位制檔案,然後使用指令碼執行。
安裝
推薦使用 docker 一鍵安裝:
docker run -it -p 9000:9000 --name minio \
-d --restart=always \
-e "MINIO_ACCESS_KEY=admin" \
-e "MINIO_SECRET_KEY=admin123456" \
-v /mnt/minio/data:/data \
-v /mnt/minio/config:/root/.minio \
minio/minio server /data
注意:
- 金鑰必須大於8位,否則會建立失敗
- 檔案目錄和配置檔案一定要對映到主機,你懂得
整合Nginx:
server{
listen 80;
server_name minio.cloudbed.vip;
location /{
proxy_set_header Host $http_host;
proxy_pass
}
location ~ /\.ht {
deny all;
}
}
這樣,透過瀏覽器訪問配置的地址,使用指定的 MINIO_ACCESS_KEY 及 MINIO_SECRET_KEY 登入即可。
簡單看了一下,功能還算可以,支援建立Bucket,檔案上傳、刪除、分享、下載,同時可以對Bucket設定讀寫許可權。
整合
Minio支援接入JavaScript、Java、Python、Golang等多種語言,這裡我們選擇最熟悉的Java語言,使用最流行的框架 SpringBoot 2.x。
pom.xml引入:
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>7.0.2</version>
</dependency>
application.properties引入:
# MinIo檔案伺服器
min.io.endpoint =
min.io.accessKey = admin
min.io.secretKey = admin123456
MinIoProperties.java 配置實體:
/**
* 實體類
* 爪哇筆記:https://blog.52itstyle.vip
*/
@Data
@ConfigurationProperties(prefix = "min.io")
public class MinIoProperties {
private String endpoint;
private String accessKey;
private String secretKey;
}
擼一個工具類:
/**
* 工具類
* 爪哇筆記:https://blog.52itstyle.vip
*/
@Component
@Configuration
@EnableConfigurationProperties({MinIoProperties.class})
public class MinIoUtils {
private MinIoProperties minIo;
public MinIoUtils(MinIoProperties minIo) {
this.minIo = minIo;
}
private MinioClient instance;
@PostConstruct
public void init() {
try {
instance = new MinioClient(minIo.getEndpoint(),minIo.getAccessKey(),minIo.getSecretKey());
} catch (InvalidPortException e) {
e.printStackTrace();
} catch (InvalidEndpointException e) {
e.printStackTrace();
}
}
/**
* 判斷 bucket是否存在
* @param bucketName
* @return
*/
public boolean bucketExists(String bucketName){
try {
return instance.bucketExists(bucketName);
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
* 建立 bucket
* @param bucketName
*/
public void makeBucket(String bucketName){
try {
boolean isExist = instance.bucketExists(bucketName);
if(!isExist) {
instance.makeBucket(bucketName);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 檔案上傳
* @param bucketName
* @param objectName
* @param filename
*/
public void putObject(String bucketName, String objectName, String filename){
try {
instance.putObject(bucketName,objectName,filename,null);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 檔案上傳
* @param bucketName
* @param objectName
* @param stream
*/
public void putObject(String bucketName, String objectName, InputStream stream){
try {
instance.putObject(bucketName,objectName,stream,null);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 刪除檔案
* @param bucketName
* @param objectName
*/
public void removeObject(String bucketName, String objectName){
try {
instance.removeObject(bucketName,objectName);
} catch (Exception e) {
e.printStackTrace();
}
}
//省略各種CRUD
}
目前SDK不支援資料夾的建立,如果想建立資料夾,只能透過檔案的方式上傳並建立。
minIoUtils.putObject("itstyle","妹子圖/爪哇妹.jpg","C:\\爪哇妹.jpg");
一個例項只能有一個賬號,如果想使用多個賬號,需要建立多個例項。此外 minio還支援單主機,多塊磁碟以及分散式部署,不過對於大部分單體應用來說,單體已經夠用了。
小結
夜深人靜的時候花了半個多小時就搞定了,是不是很簡單,一鍵傻瓜式安裝,豐富的SDK可供選擇,小白使用者是不是美滋滋。
重要的是她不僅可以作為檔案服務,還可以當做私人網盤使用,一舉兩得豈不美滋滋。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69923331/viewspace-2692997/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SpringBoot開發案例之整合Dubbo分散式服務Spring Boot分散式
- SpringBoot專案整合MinIOSpring Boot
- SpringBoot整合MinIOSpring Boot
- UniApp檔案上傳(SpringBoot+Minio)APPSpring Boot
- SpringBoot整合Tomcat服務Spring BootTomcat
- springboot系列文章之 整合redis 服務 (Lettuce & Jedis)Spring BootRedis
- SpringBoot 2.x 開發案例之前後端分離鑑權Spring Boot後端
- 本地MinIO儲存服務Java遠端呼叫上傳檔案Java
- jackson學習之九:springboot整合(配置檔案)Spring Boot
- SpringBoot整合minio前後端聯調Spring Boot後端
- SpringBoot資料訪問之整合Mybatis配置檔案Spring BootMyBatis
- 【SpringBoot】使用RestTemplate在服務之間進行MultipartFile格式檔案的傳遞【檔案上傳】Spring BootREST
- Kotlin + SpringBoot + JPA 服務端開發KotlinSpring Boot服務端
- Springboot整合MongoDB儲存檔案、讀取檔案Spring BootMongoDB
- minio上傳檔案
- SpringBoot整合Redis開發Spring BootRedis
- springboot 2.x 整合 shiro 許可權框架Spring Boot框架
- SpringBoot開發案例之郵件多例項傳送Spring Boot
- SpringBoot之logback配置檔案Spring Boot
- springboot整合eureka,服務相互呼叫簡單示例Spring Boot
- SpringBoot 2.X 整合 RocketMQ遇到的問題2Spring BootMQ
- HTTP檔案服務HTTP
- springCloud 微服務通過minio實現檔案上傳和檔案下載介面SpringGCCloud微服務
- 使用containerd搭建MinIO叢集服務AI
- SpringBoot邊學邊用(二)SpringBoot 整合 Mybatis(xml檔案形式)Spring BootMyBatisXML
- C# 專案中【支付寶】介面開發整合案例C#
- SpringBoot整合Kafka(生產者和消費者都是SpringBoot服務)Spring BootKafka
- mybatis-plus整合springboot自動生成檔案MyBatisSpring Boot
- SpringBoot快速整合SpringBootAdmin管控臺監控服務Spring Boot
- 物件儲存服務MinIO安裝部署分散式及Spring Boot專案實現檔案上傳下載物件分散式Spring Boot
- 使用 Docker 搭建 minio 檔案儲存Docker
- minio檔案上傳與下載
- Docker下Java檔案上傳服務三部曲之二:服務端開發DockerJava服務端
- SpringBoot+Minio搭建不再爆肝禿頭的分散式檔案伺服器Spring Boot分散式伺服器
- 使用MinIO搭建物件儲存服務物件
- 關於Java使用MinIO檔案伺服器操作檔案Java伺服器
- SpringBoot整合Jasypt安全框架,配置檔案內容加密Spring Boot框架加密
- 自開發Web應用和SAPCustomerDataCloudIdentity服務的整合WebCloudIDE