springboot?使用?minio的示例代碼
什么是MinIo
MinIO 是一個(gè)基于Apache License v2.0開(kāi)源協(xié)議的對(duì)象存儲(chǔ)服務(wù)。它兼容亞馬遜S3云存儲(chǔ)服務(wù)接口,非常適合于存儲(chǔ)大容量非結(jié)構(gòu)化的數(shù)據(jù),例如圖片、視頻、日志文件、備份數(shù)據(jù)和容器/虛擬機(jī)鏡像等,而一個(gè)對(duì)象文件可以是任意大小,從幾kb到最大5T不等。MinIO是一個(gè)非常輕量的服務(wù),可以很簡(jiǎn)單的和其他應(yīng)用的結(jié)合,類似 NodeJS, Redis 或者 MySQL。
Minio主要用來(lái)存儲(chǔ)非結(jié)構(gòu)化的數(shù)據(jù),類似文件,圖片,照片,日志文件,各類備份文件等,按照官網(wǎng)描述,文件的大小從幾KB到5TB。
Minio提供了非常方便,友好的界面,并且文檔也是非常豐富,具體可以參考它的文檔:https://docs.min.io/cn/
為什么選擇MinIo
在之前開(kāi)發(fā)中曾使用了分布式文件服務(wù)FASTDFS和阿里云的OSS對(duì)象存儲(chǔ)來(lái)存儲(chǔ)。奈何OSS太貴,F(xiàn)ASTDFS搭建配置又太繁瑣,今天給大家推薦一款極易上手的高性能對(duì)象存儲(chǔ)服務(wù)MinIo。
MinIO 是高性能的對(duì)象存儲(chǔ),兼容 Amazon S3接口,充分考慮開(kāi)發(fā)人員的需求和體驗(yàn);支持分布式存儲(chǔ),具備高擴(kuò)展性、高可用性;部署簡(jiǎn)單但功能豐富。官方的文檔也很詳細(xì)。它有多種不同的部署模式(單機(jī)部署,分布式部署)。
為什么說(shuō) MinIO 簡(jiǎn)單易用,原因就在于它的啟動(dòng)、運(yùn)行和配置都很簡(jiǎn)單。可以通過(guò) docker 方式進(jìn)行安裝運(yùn)行,也可以下載二進(jìn)制文件,然后使用腳本運(yùn)行。
下面介紹下springboot 使用 minio的詳細(xì)方法,代碼如下所示:
yml 配置 # ====================== ↓↓↓↓↓↓ MinIO文件服務(wù)器 ↓↓↓↓↓↓ ====================== minio: url: http://114.67.110.190:9001 accessKey: minioadmin secretKey: minioadmin bucketName: zpf
maven:
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>7.1.0</version>
</dependency>屬性文件:
package com.example.minio;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Data
@Configuration
@ConfigurationProperties(prefix = "minio")
public class MinIoProperties {
/**
* minio地址+端口號(hào)
*/
private String url;
* minio用戶名
private String accessKey;
* minio密碼
private String secretKey;
* 文件桶的名稱
private String bucketName;
}工具類:
package com.example.minio;
import io.minio.MinioClient;
import io.minio.ObjectStat;
import io.minio.PutObjectOptions;
import io.minio.messages.Bucket;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.net.URLEncoder;
import java.util.List;
@Slf4j
@Component
public class MinIoUtil {
@Autowired
MinIoProperties minIoProperties;
private static MinioClient minioClient;
/**
* 初始化minio配置
*
* @param :
* @return: void
* @date : 2020/8/16 20:56
*/
@PostConstruct
public void init() {
try {
minioClient = new MinioClient(minIoProperties.getUrl(), minIoProperties.getAccessKey(),
minIoProperties.getSecretKey());
createBucket(minIoProperties.getBucketName());
} catch (Exception e) {
e.printStackTrace();
log.error("初始化minio配置異常: 【{}】", e.fillInStackTrace());
}
}
* 判斷 bucket是否存在
* @param bucketName:
* 桶名
* @return: boolean
* @date : 2020/8/16 20:53
@SneakyThrows(Exception.class)
public static boolean bucketExists(String bucketName) {
return minioClient.bucketExists(bucketName);
* 創(chuàng)建 bucket
public static void createBucket(String bucketName) {
boolean isExist = minioClient.bucketExists(bucketName);
if (!isExist) {
minioClient.makeBucket(bucketName);
* 獲取全部bucket
* @return: java.util.List<io.minio.messages.Bucket>
* @date : 2020/8/16 23:28
public static List<Bucket> getAllBuckets() {
return minioClient.listBuckets();
* 文件上傳
* @param fileName:
* 文件名
* @param filePath:
* 文件路徑
public static void upload(String bucketName, String fileName, String filePath) {
minioClient.putObject(bucketName, fileName, filePath, null);
* @param stream:
* 文件流
* @return: java.lang.String : 文件url地址
* @date : 2020/8/16 23:40
public static String upload(String bucketName, String fileName, InputStream stream) {
minioClient.putObject(bucketName, fileName, stream, new PutObjectOptions(stream.available(), -1));
return getFileUrl(bucketName, fileName);
* @param file:
* 文件
public static String upload(String bucketName, MultipartFile file) {
final InputStream is = file.getInputStream();
final String fileName = file.getOriginalFilename();
minioClient.putObject(bucketName, fileName, is, new PutObjectOptions(is.available(), -1));
is.close();
* 刪除文件
public static void deleteFile(String bucketName, String fileName) {
minioClient.removeObject(bucketName, fileName);
* 下載文件
* @param response:
* @date : 2020/8/17 0:34
public static void download(String bucketName, String fileName, HttpServletResponse response) {
// 獲取對(duì)象的元數(shù)據(jù)
final ObjectStat stat = minioClient.statObject(bucketName, fileName);
response.setContentType(stat.contentType());
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
InputStream is = minioClient.getObject(bucketName, fileName);
IOUtils.copy(is, response.getOutputStream());
* 獲取minio文件的下載地址
* @return: java.lang.String
* @date : 2020/8/16 22:07
public static String getFileUrl(String bucketName, String fileName) {
return minioClient.presignedGetObject(bucketName, fileName);
}到此這篇關(guān)于springboot 使用 minio的文章就介紹到這了,更多相關(guān)springboot 使用 minio內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Java實(shí)現(xiàn)百萬(wàn)Excel數(shù)據(jù)導(dǎo)出
這篇文章主要為大家詳細(xì)介紹了如何使用Java實(shí)現(xiàn)百萬(wàn)Excel數(shù)據(jù)導(dǎo)出,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考一下2024-03-03
淺談java調(diào)用Restful API接口的方式
這篇文章主要介紹了淺談java調(diào)用Restful API接口的方式,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12
基于Java事件監(jiān)聽(tīng)編寫(xiě)一個(gè)中秋猜燈謎小游戲
眾所周知,JavaSwing是Java中關(guān)于窗口開(kāi)發(fā)的一個(gè)工具包,可以開(kāi)發(fā)一些窗口程序,然后由于工具包的一些限制,導(dǎo)致Java在窗口開(kāi)發(fā)商并沒(méi)有太多優(yōu)勢(shì),不過(guò),在JavaSwing中關(guān)于事件的監(jiān)聽(tīng)機(jī)制是我們需要重點(diǎn)掌握的內(nèi)容,本文將基于Java事件監(jiān)聽(tīng)編寫(xiě)一個(gè)中秋猜燈謎小游戲2023-09-09
詳解Springboot整合Dubbo之代碼集成和發(fā)布
本篇文章主要介紹了Springboot整合Dubbo之代碼集成和發(fā)布,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12
java前后端傳值,參數(shù)有集合類型的數(shù)據(jù)時(shí)的兩種操作方式
這篇文章主要介紹了java前后端傳值,參數(shù)有集合類型的數(shù)據(jù)時(shí)的兩種操作方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
springboot-2.3.x最新版源碼閱讀環(huán)境搭建(基于gradle構(gòu)建)
這篇文章主要介紹了springboot-2.3.x最新版源碼閱讀環(huán)境搭建(基于gradle構(gòu)建),需要的朋友可以參考下2020-08-08

