SpringBoot使用minio進(jìn)行文件管理的流程步驟
springboot+docker desktop使用minio進(jìn)行文件管理,記錄一下。
這里我用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
: 這個選項(xiàng)將宿主機(jī)的端口9000映射到容器的端口9000。MinIO的服務(wù)端API將通過這個端口提供訪問。-p 9090:9090
: 同樣,這個選項(xiàng)將宿主機(jī)的端口9090映射到容器的端口9090。MinIO的Web管理界面將通過這個端口提供訪問。--name minio-server
: 這個選項(xiàng)為容器指定了一個名稱,這里命名為minio-server
。-d
: 這個選項(xiàng)告訴Docker在后臺運(yùn)行容器,即以守護(hù)態(tài)運(yùn)行。--restart=always
: 這個選項(xiàng)指定了容器的重啟策略。always
意味著容器總是會在退出時重啟,這適用于希望容器持續(xù)運(yùn)行的服務(wù)。-e "MINIO_ACCESS_KEY=admin2025"
: 這個選項(xiàng)設(shè)置了一個環(huán)境變量MINIO_ACCESS_KEY
,它是MinIO的訪問密鑰,用于身份驗(yàn)證。這里設(shè)置為admin2025
。-e "MINIO_SECRET_KEY=admin2025"
: 同樣,這個選項(xiàng)設(shè)置了一個環(huán)境變量MINIO_SECRET_KEY
,它是MinIO的密鑰,也用于身份驗(yàn)證。這里也設(shè)置為admin2025
。-v D:\DockerData\minio\data:/data
: 這個選項(xiàng)將宿主機(jī)的本地路徑D:\DockerData\minio\data
掛載到容器的/data
路徑。這是MinIO存儲數(shù)據(jù)的目錄。-v D:\DockerData\minio\config:/root/.minio
: 這個選項(xiàng)將宿主機(jī)的本地路徑D:\DockerData\minio\config
掛載到容器的/root/.minio
路徑。這是MinIO存儲配置文件的目錄。quay.io/minio/minio
: 這是MinIO服務(wù)器鏡像的名稱,表示容器將從這個鏡像啟動。server /data --console-address ":9090" -address ":9000"
: 這是傳遞給MinIO服務(wù)器鏡像的命令參數(shù)。server /data
告訴MinIO使用/data
目錄作為存儲位置。--console-address ":9090"
指定了MinIO控制臺(Web界面)的地址和端口。-address ":9000"
指定了MinIO API服務(wù)器的地址和端口。
四、瀏覽器登錄 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進(jìn)行文件上傳下載刪除操作
0)導(dǎo)入依賴
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è)置響應(yīng)頭和內(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è)務(wù)邏輯調(diào)用工具類里面對應(yīng)的方法即可
上傳:
成功上傳
以上就是SpringBoot使用minio進(jìn)行文件管理的流程步驟的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot minio文件管理的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SpringBoot-JWT生成Token和攔截器的使用(訪問受限資源)
本文主要介紹了SpringBoot-JWT生成Token和攔截器的使用(訪問受限資源),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05Mybatis中Mapper標(biāo)簽總結(jié)大全
這篇文章主要介紹了Mybatis中Mapper標(biāo)簽總結(jié)大全,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06Mybatis-Plus中IdType.AUTO局部配置不生效的問題解決
本文主要介紹了Mybatis-Plus中IdType.AUTO局部配置不生效的問題解決,數(shù)據(jù)庫插入數(shù)據(jù)時,id的默認(rèn)生成方式還是雪花算法,局部配置沒有生效,下面就來解決一下,感興趣的可以了解一下2023-09-09Nacos框架服務(wù)注冊實(shí)現(xiàn)流程
這篇文章主要介紹了SpringCloud服務(wù)注冊之nacos實(shí)現(xiàn)過程,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08MybatisPlus?構(gòu)造器wrapper的使用與原理解析
本次我們介紹了MybatisPlus?構(gòu)造器wrapper的使用方式及其易錯點(diǎn),同時也針對其運(yùn)行的原理進(jìn)行了解釋,只有深刻理解了它的原理,我們才能更靈活的使用,并且更快的排查出問題,感興趣的朋友跟隨小編一起看看吧2024-05-05jenkins+Maven從SVN上構(gòu)建項(xiàng)目的方法
這篇文章主要介紹了jenkins+Maven從SVN上構(gòu)建項(xiàng)目,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09Retrofit+Rxjava下載文件進(jìn)度的實(shí)現(xiàn)
這篇文章主要介紹了Retrofit+Rxjava下載文件進(jìn)度的實(shí)現(xiàn),非常不錯,具有參考借鑒價(jià)值,需要的朋友可以參考下2017-11-11