springboot 配置minio 保存图片
一、注入依赖
<dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.5.17</version> </dependency>
二、创建配置类(配合yaml注入)
package com.wt.lease.common.minio; import io.minio.MinioClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MinioConfiguration { @Autowired private MinioProperties minioProperties; // minio 客户端 @Bean public MinioClient minioClient(){ MinioClient build = MinioClient.builder() .endpoint(minioProperties.getEndpoint()) .credentials(minioProperties.getAccessKey(), minioProperties.getSecretKey()) .build(); return build; } }
三、使用
package com.wt.lease.web.admin.service.impl; import com.wt.lease.common.minio.MinioProperties; import com.wt.lease.web.admin.service.FileService; import io.minio.*; import io.minio.errors.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.UUID; @Service public class FileServiceImpl implements FileService { @Autowired private MinioProperties minioProperties; @Autowired private MinioClient minioClient; @Override public String upload(MultipartFile file) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException { // 判断是否存在 boolean exists = minioClient.bucketExists( BucketExistsArgs.builder().bucket(minioProperties.getBucketName()).build() ); if (!exists){ // 创建桶 minioClient.makeBucket(MakeBucketArgs.builder() .bucket(minioProperties.getBucketName()) .build()); // 设置权限 minioClient.setBucketPolicy( SetBucketPolicyArgs.builder() .bucket(minioProperties.getBucketName()) .config(createBucketPolicy(minioProperties.getBucketName())) .build() ); } // 获取文件名 String filename = new SimpleDateFormat("yyyyMMdd").format(new Date()) + "/" + UUID.randomUUID() + "-" + file.getOriginalFilename(); // 上传文件 minioClient.putObject( PutObjectArgs.builder() .bucket(minioProperties.getBucketName()) .stream(file.getInputStream(), file.getSize(), -1) .object(filename) .contentType(file.getContentType()) .build() ); return String.join("/", minioProperties.getEndpoint(), minioProperties.getBucketName(), filename); } public String createBucketPolicy(String bucketName){ String policy = """ { "Statement" : [ { "Action" : "s3:GetObject", "Effect" : "Allow", "Principal" : "*", "Resource" : "arn:aws:s3:::%s/*" } ], "Version" : "2012-10-17" } """.formatted(bucketName); return policy; } }