持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天
1、导入依赖
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.2.1</version>
</dependency>
2、添加配置项,并初始化配置
基础参数配置
minio:
url: http://localhost:9000
user: admin
password: admin123
bucketName: test
新建配置文件(MinioProperties)
@Slf4j
@Getter
@Setter
@Configuration
@ConfigurationProperties(prefix = "minio")
public class MinioProperties {
/**
* 服务地址
*/
private String url;
/**
* 用户名
*/
private String user;
/**
* 密码
*/
private String password;
/**
* 存储桶名称
*/
private String bucketName;
}
新建MinioConfig
@Slf4j
@Configuration
@RequiredArgsConstructor
public class MinioConfig {
final MinioProperties minioProperties;
/**
* 注入minio 客户端
*
* @return MinioClient
*/
@Bean
public MinioClient minioClient() {
log.info("Init MinioClient Success");
return MinioClient.
builder().
endpoint(minioProperties.getUrl()).
credentials(minioProperties.getUser(), minioProperties.getPassword()).
build();
}
}
3、新建服务层,基本上传|下载|删除
新建MinioService
public interface MinioService {
/**
* 文件上传
*
* @param file 文件对象
* @return 上传结果
*/
String upload(MultipartFile file);
/**
* 文件上传
*
* @param files 文件对象
* @return 上传结果(多个用逗号分割)
*/
String upload(MultipartFile[] files);
/**
* 下载
*
* @param fileName 文件名称
* @return InputStream输入流
*/
InputStream download(String fileName);
/**
* 删除文件
*
* @param fileNames 文件名称
*/
void delete(List<String> fileNames);
}
新建MinioServiceImpl实现MinioService
@Service
@RequiredArgsConstructor
public class MinioServiceImpl implements MinioService {
final MinioClient minioClient;
final MinioProperties minioProperties;
/**
* /**
* 文件上传
*
* @param file 文件对象
* @return 上传结果
*/
@Override
@SneakyThrows
public String upload(MultipartFile file) {
// 生成文件路径
StringJoiner fileName = new StringJoiner(File.separator);
fileName.add(String.valueOf(DateUtil.thisYear()));
fileName.add(String.valueOf(DateUtil.thisMonthEnum().getValueBaseOne()));
fileName.add(String.valueOf(DateUtil.thisDayOfMonth()));
fileName.add(IdUtil.fastSimpleUUID() + "." + FileNameUtil.getSuffix(file.getOriginalFilename()));
// 上传
minioClient.putObject(PutObjectArgs.builder()
.object(fileName.toString())
.bucket(minioProperties.getBucketName())
.contentType(file.getContentType())
.stream(file.getInputStream(), file.getSize(), -1)
.build());
return fileName.toString();
}
/**
* 文件上传
*
* @param files 文件对象
* @return 上传结果(多个用逗号分割)
*/
@Override
public String upload(MultipartFile[] files) {
StringJoiner result = new StringJoiner(",");
for (MultipartFile file : files) {
result.add(this.upload(file));
}
return result.toString();
}
/**
* 下载
*
* @param fileName 文件名称
* @return InputStream输入流
*/
@Override
@SneakyThrows
public InputStream download(String fileName) {
return minioClient.getObject(GetObjectArgs.builder().bucket(minioProperties.getBucketName()).object(fileName).build());
}
/**
* 删除文件
*
* @param fileNames 文件名称
*/
@Override
public void delete(List<String> fileNames) {
minioClient.removeObjects(RemoveObjectsArgs
.builder()
.bucket(minioProperties.getBucketName())
.objects(fileNames.stream().map(DeleteObject::new).collect(Collectors.toList()))
.build());
}
}