手把手教你SpringBoot輕松整合Minio
前言
使用Spring Boot 可以非常方便、快速搭建項(xiàng)目,使我們不用關(guān)心框架之間的兼容性,適用版本等各種問題,我們想使用任何東西,僅僅添加一個(gè)配置就可以。
提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
一、技術(shù)介紹
1.Minio是什么?
MinIO 是一個(gè)基于Apache License v2.0開源協(xié)議的對象存儲服務(wù)。它兼容亞馬遜S3云存儲服務(wù)接口,非常適合于存儲大容量非結(jié)構(gòu)化的數(shù)據(jù),例如圖片、視頻、日志文件、備份數(shù)據(jù)和容器/虛擬機(jī)鏡像等,而一個(gè)對象文件可以是任意大小,從幾kb到最大5T不等。
二、使用步驟
1.引入maven庫
代碼如下(示例):
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.1</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.0.3</version> </dependency> </dependencies>
2.封裝Minio
IFile類:
package com.hyh.minio; /** * File接口類 * * @Author: heyuhua * @Date: 2021/1/12 10:33 */ public interface IFile { /** * 上傳 * * @param filename 文件名 */ void upload(String filename); /** * 上傳 * * @param filename 文件名 * @param object 保存對象文件名稱 */ void upload(String filename, String object); }
File接口類:
package com.hyh.minio.service; import com.hyh.minio.IFile; /** * File接口 * * @Author: heyuhua * @Date: 2021/1/12 10:53 */ public interface FileService extends IFile { /** * 上傳 * * @param filename 文件名稱 * @param object 保存對象文件名稱 * @param bucket 存儲桶 */ void upload(String filename, String object, String bucket); }
File接口實(shí)現(xiàn)類:
package com.hyh.minio.service.impl; import com.hyh.minio.service.FileService; import com.hyh.utils.common.StringUtils; import io.minio.BucketExistsArgs; import io.minio.MakeBucketArgs; import io.minio.MinioClient; import io.minio.UploadObjectArgs; import io.minio.errors.MinioException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.io.IOException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; /** * 文件接口服務(wù)實(shí)現(xiàn) * * @Author: heyuhua * @Date: 2021/1/12 10:53 */ @Service public class FileServiceImpl implements FileService { /** * 日志 */ private static final Logger LOG = LoggerFactory.getLogger(FileServiceImpl.class); /** * minio 客戶端 */ @Autowired private MinioClient minioClient; /** * 默認(rèn)存儲桶名稱 */ @Value("${minio.bucketName:}") private String defaultBucketName; @Override public void upload(String filename) { uploadObject(filename, null, defaultBucketName); } @Override public void upload(String filename, String object) { uploadObject(filename, object, defaultBucketName); } @Override public void upload(String filename, String object, String bucket) { uploadObject(filename, object, bucket); } /** * 上傳 * * @param filename * @param object * @param bucket */ private void uploadObject(String filename, String object, String bucket) { if (StringUtils.isAnyBlank(filename, bucket)) return; try { //存儲桶構(gòu)建 bucketBuild(bucket); //保存的文件名稱 object = StringUtils.isBlank(object) ? filename.substring(filename.lastIndexOf("/") > 0 ? filename.lastIndexOf("/") : filename.lastIndexOf("\\")) : object; minioClient.uploadObject( UploadObjectArgs.builder() .bucket(bucket) .object(object) .filename(filename) .build()); } catch (MinioException | InvalidKeyException | IOException | NoSuchAlgorithmException exception) { LOG.error("uploadObject error", exception); } } /** * 存儲桶構(gòu)建 * * @param bucketName */ private void bucketBuild(String bucketName) { try { boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build()); if (!found) { minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build()); LOG.info("Bucket " + bucketName + " make success."); } else { LOG.info("Bucket " + bucketName + " already exists."); } } catch (MinioException | InvalidKeyException | IOException | NoSuchAlgorithmException exception) { LOG.error("bucketBuild error", exception); } } public String getDefaultBucketName() { return defaultBucketName; } public void setDefaultBucketName(String defaultBucketName) { this.defaultBucketName = defaultBucketName; } }
Minio配置類:
package com.hyh.minio.config; import io.minio.MinioClient; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * @Author: heyuhua * @Date: 2021/1/12 10:42 */ @Configuration @ConfigurationProperties(prefix = "minio") public class MinioConfig { /** * endPoint是一個(gè)URL,域名,IPv4或者IPv6地址 */ private String endpoint; /** * 端口 */ private int port; /** * accessKey類似于用戶ID,用于唯一標(biāo)識你的賬戶 */ private String accessKey; /** * secretKey是你賬戶的密碼 */ private String secretKey; /** * 如果是true,則用的是https而不是http,默認(rèn)值是true */ private Boolean secure; /** * 默認(rèn)存儲桶 */ private String bucketName; /** * 配置目錄 */ private String configDir; @Bean public MinioClient getMinClient() { return MinioClient.builder() .endpoint(endpoint, port, secure)//http .credentials(accessKey, secretKey) .build(); } public String getEndpoint() { return endpoint; } public void setEndpoint(String endpoint) { this.endpoint = endpoint; } public String getAccessKey() { return accessKey; } public void setAccessKey(String accessKey) { this.accessKey = accessKey; } public String getSecretKey() { return secretKey; } public void setSecretKey(String secretKey) { this.secretKey = secretKey; } public Boolean getSecure() { return secure; } public void setSecure(Boolean secure) { this.secure = secure; } public String getBucketName() { return bucketName; } public void setBucketName(String bucketName) { this.bucketName = bucketName; } public String getConfigDir() { return configDir; } public void setConfigDir(String configDir) { this.configDir = configDir; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } }
Minio助手類封裝:
package com.hyh.minio.helper; import com.hyh.minio.service.FileService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.Assert; /** * Minio助手 * * @Author: heyuhua * @Date: 2021/1/12 10:54 */ @Component public class MinioHelper { /** * 日志 */ private static final Logger LOG = LoggerFactory.getLogger(MinioHelper.class); /** * 文件接口服務(wù) */ @Autowired private FileService fileService; /** * 上傳 * * @param filename */ public void upload(String filename) { Assert.notNull(filename, "filename is null."); fileService.upload(filename); } /** * 上傳 * * @param filename * @param object */ public void upload(String filename, String object) { Assert.notNull(filename, "filename is null."); Assert.notNull(object, "object is null."); fileService.upload(filename, object); } /** * 上傳 * * @param filename * @param object * @param bucket */ public void upload(String filename, String object, String bucket) { Assert.notNull(filename, "filename is null."); Assert.notNull(object, "object is null."); Assert.notNull(bucket, "bucket is null."); fileService.upload(filename, object, bucket); } }
3.配置文件
代碼如下(示例):
server: port: 8088 #minio配置 minio: endpoint: 39.108.49.252 port: 9000 accessKey: admin secretKey: admin123 secure: false bucketName: "hyh-bucket" configDir: "/home/data/"
4.單元測試
測試代碼如下(示例):
package com.hyh.core.test; import com.hyh.core.test.base.HyhTest; import com.hyh.minio.helper.MinioHelper; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; /** * Minio Test * * @Author: heyuhua * @Date: 2021/1/12 11:54 */ public class MinioTest extends HyhTest { @Autowired private MinioHelper minioHelper; @Test public void testUpload() { //直接指向你本地的路徑測試 String filename = "E:\\home\\static\\img\\fsPic\\0c34de99ac6b4c56812e83c4eab13a6f.jpg"; String object = "hyh-test-name.jpg"; String bucket = "hyh-test-bucket"; minioHelper.upload(filename); minioHelper.upload(filename, object); minioHelper.upload(filename, object, bucket); //上傳完后打開瀏覽器訪問 http://ip:9000 登錄控制臺可查看上傳的文件 } @Test @Override public void test() { System.out.println("---minio 測試---"); } }
總結(jié)
是不是感覺很簡單?關(guān)注我?guī)憬颐馗郙inio高級用法 源碼地址:點(diǎn)此查看源碼.
以上就是手把手教你SpringBoot輕松整合Minio的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot整合Minio的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SpringBoot使用mybatis-plus分頁查詢無效的問題解決
MyBatis-Plus提供了很多便捷的功能,包括分頁查詢,本文主要介紹了SpringBoot使用mybatis-plus分頁查詢無效的問題解決,具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12解決Nacos成功啟動但是無法訪問 (Connection refused)
這篇文章主要介紹了解決Nacos成功啟動但是無法訪問 (Connection refused)問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06Java輕松掌握面向?qū)ο蟮娜筇匦苑庋b與繼承和多態(tài)
本文主要講述的是面向?qū)ο蟮娜筇匦裕悍庋b,繼承,多態(tài),內(nèi)容含括從封裝到繼承再到多態(tài)的所有重點(diǎn)內(nèi)容以及使用細(xì)節(jié)和注意事項(xiàng),內(nèi)容有點(diǎn)長,請大家耐心看完2022-05-05Android中比較常見的Java super關(guān)鍵字
這篇文章主要為大家介紹了Android中比較常見的Java super關(guān)鍵字,具有一定的學(xué)習(xí)參考價(jià)值,感興趣的小伙伴們可以參考一下2016-01-01Java實(shí)現(xiàn)warcraft?java版游戲的示例代碼
致敬經(jīng)典的warcraft,《warcraft?java版》是一款即時(shí)戰(zhàn)略題材單機(jī)游戲,采用魔獸原味風(fēng)格和機(jī)制。本文將用java語言實(shí)現(xiàn),采用了swing技術(shù)進(jìn)行了界面化處理,感興趣的可以了解一下2022-09-09