官网地址:https://min.io/
MinIO 是一种高性能对象存储解决方案,它提供了与 Amazon Web Services S3 兼容的 API,并支持所有核心 S3 功能。MinIO 旨在部署在任何地
方——公共或私有云、裸机基础设施、编排环境和边缘基础设施。
Minio入门
使用步骤:
1、在minio服务端创建一个bucket,并设置访问权限为public
2、编写测试代码上传图片到minio中
在common模块中引入如下依赖:
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>7.1.0</version>
</dependency>
测试用例:Java客户端使demo:https://min.io/docs/minio/linux/developers/minio-drivers.html?ref=docs#java-minio-java
@Service
public class FileUploadService {
public String uploadFile(MultipartFile multipartFile) throws IOException {
try {
// 创建minio的客户端对象
MinioClient minioClient = MinioClient.builder()
.endpoint("http://192.168.6.103:9000")
.credentials("admin" , "admin1234")
.build() ;
// 判断bucket是否存在
boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket("gmall").build());
if (!found) {
// 创建一个bucket
minioClient.makeBucket(MakeBucketArgs.builder().bucket("gmall").build());
}
// 创建上传对象的参数封装对象
PutObjectArgs objectArgs = PutObjectArgs.builder()
.bucket("gmall")
.stream(multipartFile.getInputStream() , multipartFile.getSize() , -1)
.object(multipartFile.getOriginalFilename())
.build() ;
// 进行上传操作
minioClient.putObject(objectArgs) ;
}catch (Exception e) {
e.printStackTrace();
}
return "http://192.168.136.136:9000/gmall/" + multipartFile.getOriginalFilename() ;
}
}
上传文件接口编写:
@RestController
@RequestMapping(value = "/admin/product")
public class FileUploadController {
@Autowired
private FileUploadService fileUploadService ;
@PostMapping(value = "/fileUpload")
public Result<String> fileUpload(@RequestParam(value = "file") MultipartFile multipartFile) throws IOException {
String uploadFile = fileUploadService.uploadFile(multipartFile);
return Result.ok(uploadFile) ;
}
}
代码优化,可以把连接用户名密码等写到application.yml,然后抽取MinioClient配置类
application.yml
# 定义minio的连接信息
app:
minio:
endpoint: http://192.168.6.103:9000
accessKey: admin
secretKey: admin1234
bucket: xxx
抽取MinioClient配置类
// 自定义封装连接用户名密码等
@Data
@ConfigurationProperties(prefix = "app.minio")
public class MinioProperties {
private String endpoint ;
private String bucketName ;
private String secretKey ;
private String accessKey ;
//配置`类
@Configuration
@EnableConfigurationProperties(MinioProperties.class)
// 开启通过实体类型封装配置文件中内容的功能
public class MinioConfiguration {
@Autowired
private MinioProperties minioProperties ;
@Bean
public MinioClient minioClient() {
MinioClient minioClient = MinioClient.builder()
.endpoint(minioProperties.getEndpoint())
.credentials(minioProperties.getAccessKey(), minioProperties.getSecretKey())
.build() ;
return minioClient ;
}
/**
* 方法上所定义的参数,spring在调用该方法的时候会从spring容器中获取指定的对象,然后作为方法参数传递过来
* @param minioProperties
* @param minioClient
* @return
*/
@Bean//文件上传的内容抽取
public FileUploadService fileUploadService(MinioProperties minioProperties , MinioClient minioClient) {
return new FileUploadService(minioProperties , minioClient) ;
}
}
然后通过@Import注解导入配置类或者(自定义注解)
自定义注解封装@Import注解导入配置类。
@Target(value = ElementType.TYPE)//限制自定义注解使用范围为类上
@Retention(value = RetentionPolicy.RUNTIME)//生效时期为运行时
@Import(value = MinioConfiguration.class)//导入
public @interface EnableMinio {
}
启动类加入自定义注解@EnableMinio既可使用