728x90
이전글
Spring에서 S3로 삭제 요청 보내기
회원 정보의 이미지, 게시글에 들어가는 썸네일을 변경할 때 변경된 이미지가 다시 S3에 업로드된다. 업로드되면서 이전에 업로드되었던 이미지들이 그대로 남아있는 상태로, 처리하지 않는다면 점점 많은 수의 이미지가 누적될 것으로 예상되었다.
스프링에서 S3로 파일 업로드 요청이 가능했다면, 스프링에서 S3로 파일 삭제 요청이 가능하지 않을까?
이전글에서 작성한 S3FileUploadService 파일에 먼저 삭제 로직을 추가한다.
S3FileUploadService
@RequiredArgsConstructor
@Service
public class S3FileUploadService {
@Value("${cloud.aws.s3.bucket}")
private String bucketName;
...
public void deleteFile(String fileName) throws IOException {
try {
s3Client.deleteObject(bucketName, fileName);
} catch (SdkClientException e) {
throw new IOException("Error deleting file from S3", e);
}
}
}
s3Client에 존재하는 deleteObject 메서드를 사용하여 bucketName과 fileName을 함께 넘겨준다.
그럼 끝.
예제
private String getModifyImageURL(MultipartFile image, Recommend post) throws IOException {
String url = post.getRecommendImageUrl();
if (image.isEmpty()) {
return url;
}
s3FileUploadService.deleteFile(url.split("/")[3]);
return s3FileUploadService.uploadFile(image);
}
해당 메서드는 게시글 수정에서 이미지를 변경하는 기능을 가지고 있다.
먼저 해당 게시글이 가지고 있는 image의 url을 받아온다.
수정 로직에서 받아오는 image의 정보가 없다면 기존의 이미지 url을 반환한다.
하지만 수정하면서 변경된 image의 정보가 있다면, 먼저 파일이름을(url의 "/" 3번째) 분리하여 deleteFile로직을 사용한다.
그렇다면 AWS S3의 버킷에 해당 이미지가 삭제된다.
그 후 uploadFile 메서드를 사용하여 S3에 이미지를 업로드하고 해당 url을 반환한다.
반응형
'Server > Spring&Spring Boot' 카테고리의 다른 글
[Thymeleaf] th:value와 th:field를 함께 쓰면 value는 무시된다. (0) | 2023.02.10 |
---|---|
[Thymeleaf] @태그 안에 $태그 사용하기, Expression preprocessing(전처리) "__"(밑줄 2개) (0) | 2023.02.09 |
[Spring Boot] Spring Banner 변경해보기 (Spring boot run!) (2) | 2023.02.01 |
[Junit] MultipartFile과 DTO가 있는 컨트롤러 테스트 (1) | 2023.02.01 |
[Junit] 테스트 코드 할 때 가상의 Token 만들어주기 (0) | 2023.01.31 |