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

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

或者docker desktop查看:

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

三、啟動容器
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"

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

或者通過可視化docker去查看:

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

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

創(chuàng)建admin組:

創(chuàng)建accessKey和secretKe:

創(chuàng)建bucket:

六、使用java進行文件上傳下載刪除操作
0)導入依賴
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)建配置類

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)建工具類
@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();
// 完整的對象名稱,包括目錄路徑和文件名
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 要刪除的文件對象名稱(路徑)
* @throws Exception 如果刪除過程中發(fā)生錯誤
*/
public void deleteMinioObject(String objectName) throws Exception {
MinioClient minioClient =
MinioClient.builder()
.endpoint(minioProperties.getEndpoint())
.credentials(minioProperties.getUsername(), minioProperties.getPassword())
.build();
try {
// 刪除對象
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 文件對象路徑
* @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è)置響應頭和內(nè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è)置錯誤狀態(tài)碼
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
// 可以選擇記錄日志或者發(fā)送錯誤消息
e.printStackTrace();
}
}
}4)POSTMAN測試接口
這邊的話controller,service等等我就不貼出來了,根據(jù)業(yè)務邏輯調(diào)用工具類里面對應的方法即可
上傳:


成功上傳
以上就是SpringBoot使用minio進行文件管理的流程步驟的詳細內(nèi)容,更多關(guān)于SpringBoot minio文件管理的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SpringBoot-JWT生成Token和攔截器的使用(訪問受限資源)
本文主要介紹了SpringBoot-JWT生成Token和攔截器的使用(訪問受限資源),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-05-05
Mybatis-Plus中IdType.AUTO局部配置不生效的問題解決
本文主要介紹了Mybatis-Plus中IdType.AUTO局部配置不生效的問題解決,數(shù)據(jù)庫插入數(shù)據(jù)時,id的默認生成方式還是雪花算法,局部配置沒有生效,下面就來解決一下,感興趣的可以了解一下2023-09-09
MybatisPlus?構(gòu)造器wrapper的使用與原理解析
本次我們介紹了MybatisPlus?構(gòu)造器wrapper的使用方式及其易錯點,同時也針對其運行的原理進行了解釋,只有深刻理解了它的原理,我們才能更靈活的使用,并且更快的排查出問題,感興趣的朋友跟隨小編一起看看吧2024-05-05
jenkins+Maven從SVN上構(gòu)建項目的方法
這篇文章主要介紹了jenkins+Maven從SVN上構(gòu)建項目,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09
Retrofit+Rxjava下載文件進度的實現(xiàn)
這篇文章主要介紹了Retrofit+Rxjava下載文件進度的實現(xiàn),非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-11-11

