С сегодняшнего дня закатай рукава и следуй за мной.
Совет: если у вас есть какие-либо вопросы, пожалуйста, свяжитесь с личным сообщением, адрес исходного кода ниже, пожалуйста, получите его самостоятельно
предисловие
Использование Spring Boot может быть очень удобным и быстрым для сборки проекта, так что нам не нужно заботиться о совместимости между фреймворками, применимыми версиями и другими вопросами, мы хотим использовать что угодно, просто добавляем конфигурацию.
Совет: Ниже приведен основной текст этой статьи, следующие случаи приведены для справки.
1. Техническое введение
1. Что такое Минио?
MinIO — это служба хранения объектов, основанная на протоколе с открытым исходным кодом Apache License v2.0. Он совместим с интерфейсом службы облачного хранилища Amazon S3 и очень подходит для хранения неструктурированных данных большой емкости, таких как изображения, видео, файлы журналов, данные резервного копирования и образы контейнеров/виртуальных машин и т. д. Объектный файл может иметь любой размер. размер, от нескольких килобайт до максимального диапазона 5T.
2. Используйте шаги
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. Пакет Минио
Класс 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);
}
Класс файлового интерфейса:
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);
}
Класс реализации файлового интерфейса:
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 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
*/
@Component
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
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 Адрес источника:Нажмите здесь, чтобы просмотреть исходный код.