[TIL] 230811 S3 이미지 폴더 삭제하기!

CountryGirl·2023년 8월 11일

TIL

목록 보기
42/80

📌 S3 이미지 폴더삭제 (코드에서)

API를 테스트할 때 들어오는 모든 이미지들이 버킷아래로 바로 생성이 되어서
/images 라는 폴더 안에 요청별로 폴더가 생성되고 생성된 폴더 안에 이미지가 저장되도록 하였다.

이렇게 저장을 하면 더 관리하기 좋지 않을까? 라는 생각에...

원래는 폴더명이 겹치면 안되기 때문에 UUID.randomUUID()로 랜덤값을 생성하였고 그 곳 이미지를 저장하도록 했다.

Setting

  • Post Entity
@Column(nullable = false)
@ElementCollection
private List<String> imageUrls;

이렇게 imageUrls 테이블이 생기도록 하였다. 또, 저장을 할 때, imageName이 아닌 imageUrl을 저장하도록 했다.


현재 폴더 구조

S3 Bucket
 ㄴ images
     ㄴ 9fce5f5f-3967-4001-83d7-a6ca8cddd06c/
     |   ㄴ image(1).png
     |   ㄴ image(2).png
     |   ㄴ image(3).png
     |
     ㄴ 5cffe55q-2256-1987-23a0-q2wh7cdnm67k/
         ㄴ image(1).png
         ㄴ image(2).png
         ㄴ image(3).png
         

이미지 또한 겹치면 안되기 때문에 이미지명에도 UUID를 붙여주었다.
(+ 지금은 수정된 상태 230818)

폴더명: UUID.randomUUID()


😎 이미지 URL에서 폴더명 추출

public String getRequestFolderNameFromImageUrl(String imageUrl) {
	try {
        URL pasedUrl = new URL(imageUrl);
        String path = pasedUrl.getPath();
        String dir = path.substring(0, path.lastIndexOf("/") + 1).substring(8);
        return dir;
	} catch (MalformedURLException e) {
		System.out.println("e.getMessage() = " + e.getMessage());
	}
	return null;
}

이미지 테이블에는 S3에 저장된 이미지 URL이 저장된다.
그래서 URL에서 다시 폴더만 가져와야했다.

그래서 폴더이름을 가져오는 메서드를 만들었다.

https://action-boss-bucket.s3.ap-northeast-2.amazonaws.com/images/%5B1%5D_9fce5f5f-3967-4001-83d7-a6ca8cddd06c/KakaoTalk_Photo_2023-08-03-21-05-33-11664136983707980072.png

이렇게 생긴 URL에서 폴더이름을 뽑아온다.


😎 deleteFolder()

그리고 폴더를 삭제할 수 있도록 deleteFolder() 를 만들었다.

public void deleteFolder(String requestFolderName) {
	ObjectListing objectListing = amazonS3Client.listObjects(s3Bucket, "images/" + requestFolderName);
	List<DeleteObjectsRequest.KeyVersion> keyVersions = new ArrayList<>();
	for (S3ObjectSummary objectSummary : objectListing.getObjectSummaries()) {
		keyVersions.add(new DeleteObjectsRequest.KeyVersion(objectSummary.getKey()));
	}
	if (!keyVersions.isEmpty()) {
		DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest(s3Bucket).withKeys(keyVersions);
		amazonS3Client.deleteObjects(deleteObjectsRequest);
	}
}
profile
💻🌾시골소녀의 엉망징창 개발 성장일지🌾💻 (2023.05.23 ~)

0개의 댓글