洞察探索如何利用兼容微信生态的小程序容器,实现跨平台开发,助力金融和车联网行业的数字化转型。
766
2023-02-16
手把手教你SpringBoot轻松整合Minio
前言
使用Spring Boot 可以非常方便、快速搭建项目,使我们不用关心框架之间的兼容性,适用版本等各种问题,我们想使用任何东西,仅仅添加一个配置就可以。
提示:以下是本篇文章正文内容,下面案例可供参考
一、技术介绍
1.Minio是什么?
MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。
二、使用步骤
1.引入maven库
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);
}http://
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
*/
@Service
public 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 Shttp://tring 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
*/
@CompjDNthsURzOonent
public 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
http://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的资料请关注我们其它相关文章!
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~