minio上传文件
minio上传文件
- 添加依赖
- 配置minio客户端
- 创建服务类处理文件上传
- application.yml配置文件
添加依赖
<dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.5.5</version>
</dependency>
配置minio客户端
创建配置类,注入minio客户端
import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MinioConfig {@Value("${minio.endpoint}")private String endpoint;@Value("${minio.accessKey}")private String accessKey;@Value("${minio.secretKey}")private String secretKey;@Value("${minio.bucketName}")private String bucketName;@Beanpublic MinioClient minioClient() {return MinioClient.builder().endpoint(endpoint).credentials(accessKey, secretKey).build();}
}
创建服务类处理文件上传
import io.minio.BucketExistsArgs;
import io.minio.MakeBucketArgs;
import io.minio.PutObjectArgs;
import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;import java.io.InputStream;
import java.util.UUID;@Service
public class MinioService {private final MinioClient minioClient;@Value("${minio.bucketName}")private String bucketName;@Autowiredpublic MinioService(MinioClient minioClient) {this.minioClient = minioClient;}// 上传文件到MinIOpublic String uploadFile(MultipartFile file) throws Exception {// 检查存储桶是否存在,不存在则创建if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) {minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());}// 生成唯一文件名,避免冲突String fileName = UUID.randomUUID().toString() + "_" + file.getOriginalFilename();// 上传文件try (InputStream inputStream = file.getInputStream()) {minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).object(fileName).stream(inputStream, file.getSize(), -1).contentType(file.getContentType()).build());}// 返回文件访问URL(根据MinIO配置生成)return "/api/files/" + fileName; // 自定义API路径,用于后续文件访问}
}
application.yml配置文件
minio:endpoint: http://localhost:9000accessKey: your-access-keysecretKey: your-secret-keybucketName: your-bucket-name# 可选:服务器配置
server:port: 8080servlet:context-path: /api