Files
Kifi/kifi-api/src/main/java/com/kifi/api/service/MinioServiceClient.java

103 lines
3.2 KiB
Java

package com.kifi.api.service;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
@Service
public class MinioServiceClient {
private final WebClient webClient;
@Value("${spring.minio.service.url:http://minio-service:1500}")
private String minioServiceUrl;
@Value("${spring.minio.service.bucket:kifi}")
private String bucketName;
public MinioServiceClient(WebClient.Builder webClientBuilder) {
this.webClient = webClientBuilder.build();
}
@Data
public static class MinioUploadRequest {
private String bucketName;
private String directoryPath;
private String contentType;
private String fileName;
private String fileContentBase64;
private boolean overwrite;
}
@Data
public static class MinioDeleteRequest {
private String bucketName;
private String type;
private String filePath;
}
@Data
public static class MinioResponse {
private boolean success;
private String message;
private String filePath;
}
public Mono<MinioResponse> uploadFile(String directoryPath, String contentType, String fileName, String base64Content) {
MinioUploadRequest request = new MinioUploadRequest();
request.setBucketName(bucketName);
request.setDirectoryPath(directoryPath);
request.setContentType(contentType);
request.setFileName(fileName);
request.setFileContentBase64(base64Content);
request.setOverwrite(true);
return webClient.post()
.uri(minioServiceUrl + "/api/v1/minio/upload")
.bodyValue(request)
.retrieve()
.bodyToMono(MinioResponse.class);
}
public Mono<MinioResponse> deleteFile(String contentType, String filePath) {
MinioDeleteRequest request = new MinioDeleteRequest();
request.setBucketName(bucketName);
request.setType(contentType);
request.setFilePath(filePath);
return webClient.method(org.springframework.http.HttpMethod.DELETE)
.uri(minioServiceUrl + "/api/v1/minio/file")
.bodyValue(request)
.retrieve()
.bodyToMono(MinioResponse.class);
}
@Data
public static class MinioDownloadRequest {
private String bucketName;
private String type;
private String filePath;
}
@Data
public static class MinioDownloadResponse {
private boolean success;
private String message;
private String base64Content;
}
public Mono<MinioDownloadResponse> downloadFile(String contentType, String filePath) {
MinioDownloadRequest request = new MinioDownloadRequest();
request.setBucketName(bucketName);
request.setType(contentType);
request.setFilePath(filePath);
return webClient.post()
.uri(minioServiceUrl + "/api/v1/minio/download")
.bodyValue(request)
.retrieve()
.bodyToMono(MinioDownloadResponse.class);
}
}