SpringBoot使用minio進(jìn)行文件管理的流程步驟
springboot+docker desktop使用minio進(jìn)行文件管理,記錄一下。
這里我用docker desktop去安裝minio,如果本地已經(jīng)裝好minio的話(huà)可以跳過(guò)前面的步驟。
安裝docker的步驟我就省略了。
一、拉取minio鏡像
打開(kāi)命令行執(zhí)行拉去命令:
docker pull quay.io/minio/minio

執(zhí)行完后我們可以通過(guò)命令去查看鏡像:
docker images

或者docker desktop查看:

二、創(chuàng)建配置文件和上傳文件的目錄
在D盤(pán)創(chuàng)建兩個(gè)目錄:
D:\DockerData\minio\config
D:\DockerData\minio\data

三、啟動(dòng)容器
docker run -p 9000:9000 -p 9090:9090 --name minio-server -d --restart=always -e "MINIO_ACCESS_KEY=admin2025" -e "MINIO_SECRET_KEY=admin2025" -v D:\DockerData\minio\data:/data -v D:\DockerData\minio\config:/root/.minio quay.io/minio/minio server /data --console-address ":9090" -address ":9000"

這樣就啟動(dòng)好了,咱們也可以通過(guò) 命令去查看啟動(dòng)的容器:
docker ps

或者通過(guò)可視化docker去查看:

上面那段命令的解釋?zhuān)?/p>
docker run: 這是啟動(dòng)新容器的命令。-p 9000:9000: 這個(gè)選項(xiàng)將宿主機(jī)的端口9000映射到容器的端口9000。MinIO的服務(wù)端API將通過(guò)這個(gè)端口提供訪問(wèn)。-p 9090:9090: 同樣,這個(gè)選項(xiàng)將宿主機(jī)的端口9090映射到容器的端口9090。MinIO的Web管理界面將通過(guò)這個(gè)端口提供訪問(wèn)。--name minio-server: 這個(gè)選項(xiàng)為容器指定了一個(gè)名稱(chēng),這里命名為minio-server。-d: 這個(gè)選項(xiàng)告訴Docker在后臺(tái)運(yùn)行容器,即以守護(hù)態(tài)運(yùn)行。--restart=always: 這個(gè)選項(xiàng)指定了容器的重啟策略。always意味著容器總是會(huì)在退出時(shí)重啟,這適用于希望容器持續(xù)運(yùn)行的服務(wù)。-e "MINIO_ACCESS_KEY=admin2025": 這個(gè)選項(xiàng)設(shè)置了一個(gè)環(huán)境變量MINIO_ACCESS_KEY,它是MinIO的訪問(wèn)密鑰,用于身份驗(yàn)證。這里設(shè)置為admin2025。-e "MINIO_SECRET_KEY=admin2025": 同樣,這個(gè)選項(xiàng)設(shè)置了一個(gè)環(huán)境變量MINIO_SECRET_KEY,它是MinIO的密鑰,也用于身份驗(yàn)證。這里也設(shè)置為admin2025。-v D:\DockerData\minio\data:/data: 這個(gè)選項(xiàng)將宿主機(jī)的本地路徑D:\DockerData\minio\data掛載到容器的/data路徑。這是MinIO存儲(chǔ)數(shù)據(jù)的目錄。-v D:\DockerData\minio\config:/root/.minio: 這個(gè)選項(xiàng)將宿主機(jī)的本地路徑D:\DockerData\minio\config掛載到容器的/root/.minio路徑。這是MinIO存儲(chǔ)配置文件的目錄。quay.io/minio/minio: 這是MinIO服務(wù)器鏡像的名稱(chēng),表示容器將從這個(gè)鏡像啟動(dòng)。server /data --console-address ":9090" -address ":9000": 這是傳遞給MinIO服務(wù)器鏡像的命令參數(shù)。server /data告訴MinIO使用/data目錄作為存儲(chǔ)位置。--console-address ":9090"指定了MinIO控制臺(tái)(Web界面)的地址和端口。-address ":9000"指定了MinIO API服務(wù)器的地址和端口。
四、瀏覽器登錄 minio
輸入網(wǎng)址:http://127.0.0.1:9090/login
使用剛剛設(shè)置的賬號(hào)密碼登錄:admin2025 admin2025
到這里minio就啟動(dòng)好了

五、創(chuàng)建用戶(hù),組,bucket....
創(chuàng)建admin用戶(hù):

創(chuàng)建admin組:

創(chuàng)建accessKey和secretKe:

創(chuàng)建bucket:

六、使用java進(jìn)行文件上傳下載刪除操作
0)導(dǎo)入依賴(lài)
Maven
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.5.14</version>
</dependency>Gradle
dependencies {
implementation("io.minio:minio:JAVAVERSION")
}1)配置yml

# minio配置 minio: endpoint: http://127.0.0.1:9000 username: admin password: cepc_2025@admin bucketName: cepc
2)創(chuàng)建配置類(lèi)

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@Component
@ConfigurationProperties(prefix = "minio")
public class MinioProperties {
private String endpoint;
private String username;
private String password;
private String bucketName;
}3)創(chuàng)建工具類(lèi)
@Slf4j
@Component
public class UploadUtil {
@Autowired
private MinioProperties minioProperties;
/**
* 上傳文件到minio并重命名
*
* @param multipartFile 上傳文件
* @param dirPath 文件上傳路徑(例如:images/pdf)
* @param newFileName 新文件名
* @return eTag
* @throws Exception
*/
public String uploadMinioRename(MultipartFile multipartFile, String dirPath, String newFileName) throws Exception {
MinioClient minioClient =
MinioClient.builder()
.endpoint(minioProperties.getEndpoint())
.credentials(minioProperties.getUsername(), minioProperties.getPassword())
.build();
// 完整的對(duì)象名稱(chēng),包括目錄路徑和文件名
String objectName = dirPath + "/" + newFileName;
// 上傳文件
try (InputStream is = multipartFile.getInputStream()) {
minioClient.putObject(
PutObjectArgs.builder().bucket(minioProperties.getBucketName()).object(objectName).stream(
is, multipartFile.getSize(), -1)
.contentType(multipartFile.getContentType())
.build());
} catch (MinioException e) {
log.error("Error occurred: {}", e);
throw new Exception("Error occurred while uploading the file.", e);
}
return objectName;
}
/**
* 刪除MinIO上的文件
*
* @param objectName 要?jiǎng)h除的文件對(duì)象名稱(chēng)(路徑)
* @throws Exception 如果刪除過(guò)程中發(fā)生錯(cuò)誤
*/
public void deleteMinioObject(String objectName) throws Exception {
MinioClient minioClient =
MinioClient.builder()
.endpoint(minioProperties.getEndpoint())
.credentials(minioProperties.getUsername(), minioProperties.getPassword())
.build();
try {
// 刪除對(duì)象
minioClient.removeObject(
RemoveObjectArgs.builder()
.bucket(minioProperties.getBucketName())
.object(objectName)
.build());
} catch (MinioException e) {
log.error("Error occurred: {}", e);
throw new Exception("Error occurred while deleting the file.", e);
}
}
/**
* 下載MinIO上的文件
*
* @param path 文件對(duì)象路徑
* @param fileSuffix 文件后綴
* @throws Exception
*/
public void downloadMinioObject(String path, HttpServletResponse response, String fileSuffix) throws Exception {
MinioClient minioClient =
MinioClient.builder()
.endpoint(minioProperties.getEndpoint())
.credentials(minioProperties.getUsername(), minioProperties.getPassword())
.build();
try {
// 設(shè)置響應(yīng)頭和內(nèi)容類(lèi)型
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=\"" + "response."+fileSuffix + "\"");
// 從MinIO獲取文件
try (InputStream is = minioClient.getObject(
GetObjectArgs.builder()
.bucket(minioProperties.getBucketName())
.object(path)
.build());
OutputStream os = response.getOutputStream()) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = is.read(buffer)) != -1) {
os.write(buffer, 0, bytesRead);
}
os.flush();
}
} catch (Exception e) {
// 處理異常,設(shè)置錯(cuò)誤狀態(tài)碼
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
// 可以選擇記錄日志或者發(fā)送錯(cuò)誤消息
e.printStackTrace();
}
}
}4)POSTMAN測(cè)試接口
這邊的話(huà)controller,service等等我就不貼出來(lái)了,根據(jù)業(yè)務(wù)邏輯調(diào)用工具類(lèi)里面對(duì)應(yīng)的方法即可
上傳:


成功上傳
以上就是SpringBoot使用minio進(jìn)行文件管理的流程步驟的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot minio文件管理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- SpringBoot集成MinIO實(shí)現(xiàn)大文件分片上傳的示例代碼
- SpringBoot整合Minio實(shí)現(xiàn)文件上傳和讀取功能
- springboot整合minio實(shí)現(xiàn)文件存儲(chǔ)功能
- Springboot2.7+Minio8 實(shí)現(xiàn)大文件分片上傳
- SpringBoot+MinIO實(shí)現(xiàn)文件上傳、讀取、下載、刪除的使用示例
- SpringBoot使用Minio進(jìn)行文件存儲(chǔ)的實(shí)現(xiàn)
- SpringBoot整合MinIO實(shí)現(xiàn)全場(chǎng)景文件操作管理
相關(guān)文章
SpringBoot-JWT生成Token和攔截器的使用(訪問(wèn)受限資源)
本文主要介紹了SpringBoot-JWT生成Token和攔截器的使用(訪問(wèn)受限資源),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05
Mybatis中Mapper標(biāo)簽總結(jié)大全
這篇文章主要介紹了Mybatis中Mapper標(biāo)簽總結(jié)大全,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
Mybatis-Plus中IdType.AUTO局部配置不生效的問(wèn)題解決
本文主要介紹了Mybatis-Plus中IdType.AUTO局部配置不生效的問(wèn)題解決,數(shù)據(jù)庫(kù)插入數(shù)據(jù)時(shí),id的默認(rèn)生成方式還是雪花算法,局部配置沒(méi)有生效,下面就來(lái)解決一下,感興趣的可以了解一下2023-09-09
Nacos框架服務(wù)注冊(cè)實(shí)現(xiàn)流程
這篇文章主要介紹了SpringCloud服務(wù)注冊(cè)之nacos實(shí)現(xiàn)過(guò)程,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08
MybatisPlus?構(gòu)造器wrapper的使用與原理解析
本次我們介紹了MybatisPlus?構(gòu)造器wrapper的使用方式及其易錯(cuò)點(diǎn),同時(shí)也針對(duì)其運(yùn)行的原理進(jìn)行了解釋,只有深刻理解了它的原理,我們才能更靈活的使用,并且更快的排查出問(wèn)題,感興趣的朋友跟隨小編一起看看吧2024-05-05
jenkins+Maven從SVN上構(gòu)建項(xiàng)目的方法
這篇文章主要介紹了jenkins+Maven從SVN上構(gòu)建項(xiàng)目,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
Retrofit+Rxjava下載文件進(jìn)度的實(shí)現(xiàn)
這篇文章主要介紹了Retrofit+Rxjava下載文件進(jìn)度的實(shí)現(xiàn),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-11-11
利用Java和c語(yǔ)言寫(xiě)一個(gè)計(jì)算器
這篇文章我們就來(lái)分享如何利用Java和c語(yǔ)言來(lái)寫(xiě)一個(gè)計(jì)算器,文章附有代碼詳細(xì)說(shuō)明,感興趣得小伙伴可以參考下面文章得具體內(nèi)容2021-10-10

