本篇文章主要介绍使用 Docker 部署 Minio 对象存储服务,并整合到 SpringBoot 项目中
拉取 Minio 镜像
docker pull minio/minio
启动容器
docker run -p 9000:9000 -p 9090:9090 \
--name minio \
--restart=always \
--privileged=true \
-v /root/mall/minio/data:/data \
-e MINIO_ROOT_USER=admin \
-e MINIO_ROOT_PASSWORD=admin123 \
-d minio/minio \
server /data --console-address ":9090" --address ":9000"
MINIO_ROOT_USER
和MINIO_ROOT_PASSWORD
:用来指定登陆 Minio 控制台时使用的用户名和密码server /data --console-address ":9090" --address ":9000"
:server /data 用来启动 Minio 服务,后面参数用来指定 Minio 控制台访问地址的端口号为 9090,API 访问地址的端口号为 9000
查看容器
docker logs -f minio
- 容器日志如下图所示,Minio 服务成功启动。
- 使用浏览器访问对应的 Console 地址,输入用户名和密码,登陆到控制台界面。新建一个 bucket,用来在项目中使用。
SpringBoot 整合 Minio
- 在 application.yaml 配置文件中,新增 Minio 配置信息
endpoint:Minio 服务的 API 访问地址(端口为 9000)
bucketName:Minio 的 bucket 名称
accessKey:Minio 登陆的用户名
secretKey:Minio 登陆的密码
- 新建 MinioConfig 配置类
@Configuration
@Slf4j
public class MinioConfig {
@Value("${minio.endpoint}")
private String endpoint;
@Value("${minio.accessKey}")
private String accessKey;
@Value("${minio.secretKey}")
private String secretKey;
@Bean
public MinioClient minioClient() {
log.info("minio连接成功,endpoint:{}",endpoint);
return MinioClient.builder()
.endpoint(endpoint)
.credentials(accessKey,secretKey)
.build();
}
}
- 使用验证
@Service
@Slf4j
public class MinioServiceImpl implements MinioService {
@Value("${minio.bucketName}")
private String bucketName;
@Resource
private MinioClient minioClient;
// 文件上传
@Override
public void uploadFile(MultipartFile file) {
String originalFilename = file.getOriginalFilename();
if (StringUtils.isBlank(originalFilename)) {
throw new BusinessException(EmBusinessError.UNKNOWN_ERROR, "文件不存在");
}
try {
BucketExistsArgs bucketExistsArgs = BucketExistsArgs.builder().bucket(bucketName).build();
if (minioClient.bucketExists(bucketExistsArgs)) {
PutObjectArgs objectArgs = PutObjectArgs.builder().object(originalFilename)
.bucket(bucketName)
.contentType(file.getContentType())
.stream(file.getInputStream(), file.getSize(), -1).build();
ObjectWriteResponse objectWriteResponse = minioClient.putObject(objectArgs);
}
} catch (Exception e) {
log.error("文件上传失败");
e.printStackTrace();
}
}
}
至此,Minio 对象存储服务成功整合到项目当中。