FileCommandServiceImpl.java
package com.deveagles.be15_deveagles_be.features.users.command.application.service;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.deveagles.be15_deveagles_be.common.exception.BusinessException;
import com.deveagles.be15_deveagles_be.common.exception.ErrorCode;
import java.io.IOException;
import java.util.UUID;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
@Slf4j
@Service
@RequiredArgsConstructor
public class FileCommandServiceImpl implements FileCommandService {
private final AmazonS3 amazonS3;
@Value("${cloud.aws.s3.bucket}")
private String bucket;
@Override
public String saveProfile(MultipartFile profile) {
String fileName = "user/thumbnail_" + UUID.randomUUID() + "_" + profile.getOriginalFilename();
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentLength(profile.getSize());
metadata.setContentType(profile.getContentType());
try {
amazonS3.putObject(bucket, fileName, profile.getInputStream(), metadata);
} catch (IOException e) {
throw new BusinessException(ErrorCode.FILE_SAVE_ERROR);
}
return amazonS3.getUrl(bucket, fileName).toString();
}
}