手把手教你SpringBoot轻松整合Minio

时间:2021-05-19

前言

使用Spring Boot 可以非常方便、快速搭建项目,使我们不用关心框架之间的兼容性,适用版本等各种问题,我们想使用任何东西,仅仅添加一个配置就可以。

提示:以下是本篇文章正文内容,下面案例可供参考

一、技术介绍

1.Minio是什么?

MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几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接口实现类:

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;/** * 文件接口服务实现 * * @Author: heyuhua * @Date: 2021/1/12 10:53 */@Servicepublic class FileServiceImpl implements FileService { /** * 日志 */ private static final Logger LOG = LoggerFactory.getLogger(FileServiceImpl.class); /** * minio 客户端 */ @Autowired private MinioClient minioClient; /** * 默认存储桶名称 */ @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 { //存储桶构建 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); } } /** * 存储桶构建 * * @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是一个URL,域名,IPv4或者IPv6地址 */ private String endpoint; /** * 端口 */ private int port; /** * accessKey类似于用户ID,用于唯一标识你的账户 */ private String accessKey; /** * secretKey是你账户的密码 */ private String secretKey; /** * 如果是true,则用的是https而不是http,默认值是true */ private Boolean secure; /** * 默认存储桶 */ 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 */@Componentpublic class MinioHelper { /** * 日志 */ private static final Logger LOG = LoggerFactory.getLogger(MinioHelper.class); /** * 文件接口服务 */ @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 测试---"); }}

总结

是不是感觉很简单?关注我带你揭秘更多Minio高级用法 源码地址:点此查看源码.

以上就是手把手教你SpringBoot轻松整合Minio的详细内容,更多关于SpringBoot整合Minio的资料请关注其它相关文章!

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章