Minio是GlusterFS創(chuàng)始人之一Anand Babu Periasamy發(fā)布新的開源項(xiàng)目?;贏pache License v2.0開源協(xié)議的對象存儲項(xiàng)目,采用Golang實(shí)現(xiàn),客戶端支Java,Python,Javacript, Golang語言。
其設(shè)計(jì)的主要目標(biāo)是作為私有云對象存儲的標(biāo)準(zhǔn)方案。主要用于存儲海量的圖片,視頻,文檔等。非常適合于存儲大容量非結(jié)構(gòu)化的數(shù)據(jù),例如圖片、視頻、日志文件、備份數(shù)據(jù)和容器/虛擬機(jī)鏡像等,而一個(gè)對象文件可以是任意大小,從幾kb到最大5T不等。
minio的服務(wù)部署這里就不敘述了。
1.pom.xml中引用minio的依賴
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.5.3</version>
</dependency>
2.application.yml配置文件中配置minio的信息
minio:
accessKey: ********
secretKey: **********
bucketName: yanliang
endPoint: http://127.0.0.1:9000 #換成自己的minio服務(wù)器地址
url: http://127.0.0.1:9000
#文件的過期時(shí)間(分鐘)
expires: 5
3.寫一個(gè)minio的工具類UploadMinioUtil
package com.yunmao.yanliang.util;
import io.minio.MinioClient;
import io.minio.ObjectStat;
import io.minio.Result;
import io.minio.errors.MinioException;
import io.minio.messages.Item;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.xmlpull.v1.XmlPullParserException;
import java.io.IOException;
import java.net.URL;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;
/**
* minio工具類
* @author 言涼
*/
@Component
public class UploadMinioUtil {
@Value("${minio.accessKey}")
private String accessKey;
@Value("${minio.secretKey}")
private String secretKey;
@Value("${minio.bucketName}")
private String bucketName;
@Value("${minio.endPoint}")
private String endPoint;
@Value("${minio.url}")
private String url;
@Value("${minio.expires}")
private int expires;
/**
* 上傳文件至Minio文件系統(tǒng)
*
* @param objectName 存在Minio系統(tǒng)中的路徑
* @param filePath 上傳文件的路徑
* @return
* @throws NoSuchAlgorithmException
* @throws IOException
* @throws InvalidKeyException
* @throws XmlPullParserException
*/
public String uploadFileMinio(String objectName, String filePath) throws NoSuchAlgorithmException, IOException, InvalidKeyException, XmlPullParserException {
String fileUrl = "";
try {
// 使用Minio服務(wù)的URL,端口,Access key和Secret key創(chuàng)建一個(gè)MinioClient對象
MinioClient minioClient = new MinioClient(endPoint, accessKey, secretKey);
// 檢查存儲桶是否已經(jīng)存在
boolean isExist = minioClient.bucketExists(bucketName);
if (isExist) {
System.out.println("Bucket already exists.");
} else {
// 創(chuàng)建一個(gè)名為asiatrip的存儲桶,用于存儲照片的zip文件。
minioClient.makeBucket(bucketName);
}
// 使用putObject上傳一個(gè)文件到存儲桶中。
minioClient.putObject(bucketName, objectName, filePath);
// 返回對象名
fileUrl = objectName;
} catch (MinioException e) {
e.printStackTrace();
}
return fileUrl;
}
/**
* 查詢Minio文件系統(tǒng)中文件的url
*
* @param objectName 文件路徑
* @return
* @throws NoSuchAlgorithmException
* @throws IOException
* @throws InvalidKeyException
* @throws XmlPullParserException
* @throws MinioException
*/
public String getFileMinio(String objectName) throws NoSuchAlgorithmException, IOException, InvalidKeyException, XmlPullParserException, MinioException {
String newFileUrl = "";
try {
// 使用Minio服務(wù)的URL,端口,Access key和Secret key創(chuàng)建一個(gè)MinioClient對象
MinioClient minioClient = new MinioClient(endPoint, accessKey, secretKey);
// 使用putObject上傳一個(gè)文件到存儲桶中。
String fileUrl = minioClient.presignedGetObject(bucketName, objectName, 60 * expires);
URL u = new URL(fileUrl);
String file = u.getFile();
newFileUrl = url + file;
} catch (MinioException e) {
e.printStackTrace();
}
return newFileUrl;
}
/**
* 查詢Minio文件系統(tǒng)中文件是否存在
*
* @param objectName
* @return
* @throws NoSuchAlgorithmException
* @throws IOException
* @throws InvalidKeyException
* @throws XmlPullParserException
* @throws MinioException
*/
public Boolean statFileMinio(String objectName) throws NoSuchAlgorithmException, IOException, InvalidKeyException, XmlPullParserException, MinioException {
Boolean isExist = false;
try {
// 使用Minio服務(wù)的URL,端口,Access key和Secret key創(chuàng)建一個(gè)MinioClient對象
MinioClient minioClient = new MinioClient(endPoint, accessKey, secretKey);
// 獲得對象的元數(shù)據(jù)。
ObjectStat objectStat = minioClient.statObject(bucketName, objectName);
isExist = true;
} catch (MinioException e) {
e.printStackTrace();
isExist = false;
}
return isExist;
}
/**
* 刪除Minio文件系統(tǒng)中的文件
*
* @param objectName 文件路徑
* @throws NoSuchAlgorithmException
* @throws IOException
* @throws InvalidKeyException
* @throws XmlPullParserException
* @throws MinioException
*/
public void deleteFileMinio(String objectName) throws NoSuchAlgorithmException, IOException, InvalidKeyException, XmlPullParserException, MinioException {
try {
// 使用Minio服務(wù)的URL,端口,Access key和Secret key創(chuàng)建一個(gè)MinioClient對象
MinioClient minioClient = new MinioClient(endPoint, accessKey, secretKey);
// 從mybucket中刪除myobject。
minioClient.removeObject(bucketName, objectName);
} catch (MinioException e) {
e.printStackTrace();
}
}
/**
* 批量獲取minio文件夾下的所有文件
*
* @param objectName 文件路徑
* @return
* @throws NoSuchAlgorithmException
* @throws IOException
* @throws InvalidKeyException
* @throws XmlPullParserException
* @throws MinioException
*/
public List<String> getFileListMinio(String objectName) throws NoSuchAlgorithmException, IOException, InvalidKeyException, XmlPullParserException, MinioException {
Iterable<Result<Item>> files = null;
List<String> list = new ArrayList<>();
try {
// 使用Minio服務(wù)的URL,端口,Access key和Secret key創(chuàng)建一個(gè)MinioClient對象
MinioClient minioClient = new MinioClient(endPoint, accessKey, secretKey);
// 使用putObject上傳一個(gè)文件到存儲桶中。
files = minioClient.listObjects(bucketName,objectName);
for(Result<Item> result: files){
String objName=result.get().objectName();
String fileurl = this.getFileMinio(objName);
list.add(fileurl);
}
} catch (MinioException e) {
e.printStackTrace();
}
return list;
}
}
4.實(shí)現(xiàn),在需要對接minio的地方先注入minio工具類
@Autowired
private UploadMinioUtil uploadMinioUtil;
實(shí)現(xiàn)用uploadMinioUtil.方法實(shí)現(xiàn)文件的上傳,下載,刪除,批量獲取等操作文章來源:http://www.zghlxwxcb.cn/news/detail-653272.html
說明:方法中的objectName值為文件在minio系統(tǒng)中的路徑文章來源地址http://www.zghlxwxcb.cn/news/detail-653272.html
到了這里,關(guān)于SpringBoot整合minio,文件的上傳下載,批量獲取的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!