SpringBoot整合Minio的示例代碼
SpringBoot整合Minio
進(jìn)入Minio官網(wǎng),下載對應(yīng)的Minio版本


下載完成之后,啟動(windows版)
minio.exe server D:\minio\server

minio.exe server:啟動服務(wù)
D:\minio\server:設(shè)置上傳圖片存儲路徑
API:上傳圖片鏈接(端口默認(rèn)9000)
RootUser:賬號
RootPass:密碼
Console:控制臺地址
訪問控制臺地址:http://192.168.1.15:50932 進(jìn)入控制臺

創(chuàng)建存儲桶

引入依賴
<!--minio-->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.0.3</version>
</dependency>yml配置
server:
port: 8099
spring:
# 配置文件上傳大小限制
servlet:
multipart:
max-file-size: 200MB
max-request-size: 200MB
minio:
#文件上傳接口
endpoint: http://127.0.0.1:9000
accessKey: minioadmin
secretKey: minioadmin
#存儲通名稱
bucketName: img配置類(注冊minio客戶端)
@Data
@Component
public class MinIoClientConfig {
@Value("${minio.endpoint}")
private String endpoint;
@Value("${minio.accessKey}")
private String accessKey;
@Value("${minio.secretKey}")
private String secreKey;
/**
* 注入minio客戶端
* @return
*/
@Bean
public MinioClient minioClient(){
return MinioClient.builder()
.endpoint(endpoint)
.credentials(accessKey,secreKey)
.build();
}
}工具類
/**
* 功能描述:MinioUtils
*
* @author: sc
* @Date: 2022/12/27
* @Time: 10:26
*/
@Component
public class MinioUtils {
@Autowired
private MinioClient minioClient;
@Value("${minio.bucketName}")
private String bucketName;
/**
* description: 判斷bucket是否存在,不存在則創(chuàng)建
*
* @return: void
*/
public void existBucket(String name) {
try {
boolean exists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(name).build());
if (!exists) {
minioClient.makeBucket(MakeBucketArgs.builder().bucket(name).build());
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 創(chuàng)建存儲bucket
* @param bucketName 存儲bucket名稱
* @return Boolean
*/
public Boolean makeBucket(String bucketName) {
try {
minioClient.makeBucket(MakeBucketArgs.builder()
.bucket(bucketName)
.build());
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
/**
* 刪除存儲bucket
* @param bucketName 存儲bucket名稱
* @return Boolean
*/
public Boolean removeBucket(String bucketName) {
try {
minioClient.removeBucket(RemoveBucketArgs.builder()
.bucket(bucketName)
.build());
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
/**
* description: 上傳文件
*
* @param multipartFile
* @return: java.lang.String
*/
public List<String> upload(MultipartFile[] multipartFile) {
List<String> names = new ArrayList<>(multipartFile.length);
for (MultipartFile file : multipartFile) {
String fileName = file.getOriginalFilename();
String[] split = fileName.split("\\.");
if (split.length > 1) {
fileName = split[0] + "_" + System.currentTimeMillis() + "." + split[1];
} else {
fileName = fileName + System.currentTimeMillis();
}
InputStream in = null;
try {
in = file.getInputStream();
minioClient.putObject(PutObjectArgs.builder()
.bucket(bucketName)
.object(fileName)
.stream(in, in.available(), -1)
.contentType(file.getContentType())
.build()
);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
names.add(fileName);
}
return names;
}
/**
* description: 下載文件
*
* @param fileName
* @return: org.springframework.http.ResponseEntity<byte [ ]>
*/
public ResponseEntity<byte[]> download(String fileName) {
ResponseEntity<byte[]> responseEntity = null;
InputStream in = null;
ByteArrayOutputStream out = null;
try {
in = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).build());
out = new ByteArrayOutputStream();
IOUtils.copy(in, out);
//封裝返回值
byte[] bytes = out.toByteArray();
HttpHeaders headers = new HttpHeaders();
try {
headers.add("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
headers.setContentLength(bytes.length);
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setAccessControlExposeHeaders(Arrays.asList("*"));
responseEntity = new ResponseEntity<byte[]>(bytes, headers, HttpStatus.OK);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (out != null) {
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return responseEntity;
}
/**
* 查看文件對象
* @param bucketName 存儲bucket名稱
* @return 存儲bucket內(nèi)文件對象信息
*/
public List<ObjectItem> listObjects(String bucketName) {
Iterable<Result<Item>> results = minioClient.listObjects(
ListObjectsArgs.builder().bucket(bucketName).build());
List<ObjectItem> objectItems = new ArrayList<>();
try {
for (Result<Item> result : results) {
Item item = result.get();
ObjectItem objectItem = new ObjectItem();
objectItem.setObjectName(item.objectName());
objectItem.setSize(item.size());
objectItems.add(objectItem);
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
return objectItems;
}
/**
* 批量刪除文件對象
* @param bucketName 存儲bucket名稱
* @param objects 對象名稱集合
*/
public Iterable<Result<DeleteError>> removeObjects(String bucketName, List<String> objects) {
List<DeleteObject> dos = objects.stream().map(e -> new DeleteObject(e)).collect(Collectors.toList());
Iterable<Result<DeleteError>> results = minioClient.removeObjects(RemoveObjectsArgs.builder().bucket(bucketName).objects(dos).build());
return results;
}
}
實體類
/**
* 功能描述:
*
* @author: sc
* @Date: 2022/12/27
* @Time: 10:25
*/
@Data
public class ObjectItem {
private String objectName;
private Long size;
}編寫Controller
/**
* 功能描述:
*
* @author: sc
* @Date: 2022/12/27
* @Time: 10:35
*/
@RestController
public class MinioController {
@Resource
private MinioUtils minioUtils;
@Value("${minio.endpoint}")
private String address;
@Value("${minio.bucketName}")
private String bucketName;
/**
* 文件上傳
* @param files
* @return
*/
@PostMapping("/upload")
public Object upload(MultipartFile[] files){
List<String> uploadUrl = new ArrayList<>();
List<String> upload = minioUtils.upload(files);
for (String s : upload) {
uploadUrl.add(address+"/"+bucketName+"/"+s);
}
return uploadUrl;
}
/**
* 移除圖片
* @param imgUrlList
* @return
*/
@PostMapping("/remove")
public Object remove(@RequestBody List<String> imgUrlList){
Iterable<Result<DeleteError>> img = minioUtils.removeObjects("img", imgUrlList);
return img;
}
/**
* 下載圖片
* @param fileName
* @return
*/
@GetMapping("/download/{fileName}")
public Object download(@PathVariable("fileName") String fileName){
ResponseEntity<byte[]> download = minioUtils.download(fileName);
return download;
}
}
到此這篇關(guān)于SpringBoot整合Minio的文章就介紹到這了,更多相關(guān)SpringBoot整合Minio內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot+MinIO實現(xiàn)對象存儲的示例詳解
- SpringBoot基于Minio實現(xiàn)分片上傳、斷點續(xù)傳的實現(xiàn)
- springboot?Minio功能實現(xiàn)代碼
- SpringBoot集成MinIO的示例代碼
- SpringBoot + minio實現(xiàn)分片上傳、秒傳、續(xù)傳功能
- SpringBoot整合minio服務(wù)的示例代碼
- SpringBoot使用Minio進(jìn)行文件存儲的實現(xiàn)
- 可能是全網(wǎng)最詳細(xì)的springboot整合minio教程
- Springboot整合minio實現(xiàn)文件服務(wù)的教程詳解
- SpringBoot整合Minio實現(xiàn)上傳文件的完整步驟記錄
- SpringBoot整合MinIO實現(xiàn)文件上傳的方法詳解
- SpringBoot整合minio快速入門教程(代碼示例)
- SpringBoot+MinIO實現(xiàn)文件上傳、讀取、下載、刪除的使用示例
相關(guān)文章
FeignClient如何通過配置變量調(diào)用配置文件url
這篇文章主要介紹了FeignClient如何通過配置變量調(diào)用配置文件url,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06
SpringBoot中@ConfigurationProperties注解的使用與源碼詳解
這篇文章主要介紹了SpringBoot中@ConfigurationProperties注解的使用與源碼詳解,@ConfigurationProperties注解用于自動配置綁定,可以將application.properties配置中的值注入到bean對象上,需要的朋友可以參考下2023-11-11
Java如何利用LocalDate獲取某個月的第一天與最后一天日期
這篇文章主要給大家介紹了關(guān)于Java如何利用LocalDate獲取某個月的第一天與最后一天日期的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2022-01-01
JSON各種轉(zhuǎn)換問題(json轉(zhuǎn)List,json轉(zhuǎn)對象等)
這篇文章主要介紹了JSON各種轉(zhuǎn)換問題(json轉(zhuǎn)List,json轉(zhuǎn)對象等),本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-03-03
關(guān)于mybatis plus 中的查詢優(yōu)化問題
這篇文章主要介紹了關(guān)于mybatis plus 中的查詢優(yōu)化問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01
詳談@Cacheable不起作用的原因:bean未序列化問題
這篇文章主要介紹了@Cacheable不起作用的原因:bean未序列化問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01
minio的下載和springboot整合minio使用方法
本文介紹了如何通過Docker拉取MinIO鏡像,并創(chuàng)建MinIO容器的過程,首先,需要在本地創(chuàng)建/data和/conf兩個目錄用于掛載MinIO的數(shù)據(jù)和配置文件,接下來,通過docker?run命令啟動容器,設(shè)置MinIO的訪問端口、用戶名、密碼等信息,感興趣的朋友一起看看吧2024-09-09
springboot項目獲取resources相對路徑的方法
這篇文章主要介紹了springboot項目獲取resources相對路徑的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12

