-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: 리스트 삭제 API 구현 #83
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
파일 삭제 구현 제가 직접 테스트 해서 안되는 부분 삭제하고 좋은 방안 제안해 놓았습니다.
리스트 삭제 API 구현하느라 수고하셨습니다! 변경사항 변경해주시고 merge해주세요!
@Async | ||
public void deleteAllOfListImages(Long listId) { | ||
String path = "/" + getCurrentProfile() + "/lists_item/" + listId + "/"; | ||
|
||
ListObjectsV2Result listObjects; | ||
do { | ||
listObjects = amazonS3.listObjectsV2(bucket, path); | ||
for (S3ObjectSummary object : listObjects.getObjectSummaries()) { | ||
amazonS3.deleteObject(new DeleteObjectRequest(bucket, object.getKey())); | ||
} | ||
listObjects.setContinuationToken(listObjects.getNextContinuationToken()); | ||
} while (listObjects.isTruncated()); | ||
|
||
try { | ||
amazonS3.deleteObject(bucket, path); | ||
} catch (AmazonServiceException e) { | ||
throw new CustomException(S3_DELETE_OBJECTS_EXCEPTION); | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
로직을 실제로 실행 시켜봤습니다.
동호님이 작성하신 로직은 s3 bucket에 해당하는 폴더안에 있는 모든 파일을 listObjects에 가져와 반복문으로 해당 파일을 삭제 시켜주는 것 같습니다.
한가지 문제는 path에 맨앞에 /를 제외시켜야한다는 점입니다.
또한 해당 폴더 안에 모든 요소를 삭제한경우 폴더는 비워져있어 s3에서 자체적으로 폴더를 지워버리는것을 확인했습니다.
그래서 해당 try catch로 묶여있는 폴더 제거 로직은 없어도 될 거 같습니다.
아래 코드처럼 하시는게 더 깔끔하고 좋을 거 같네요!
그리고 맨 아래에 있는 메서드는 폴더안에 파일을 전체 삭제안하고 개별 삭제를 해야하는 경우 사용하시면 좋을 거 같아서 참고하라고 적어놓습니다!! 맨 아래에 있는 메서드는 폴더로 접근 못하고 파일 풀네임이 필요하단점 ! (테스트 해보니 그럼)
@Async | |
public void deleteAllOfListImages(Long listId) { | |
String path = "/" + getCurrentProfile() + "/lists_item/" + listId + "/"; | |
ListObjectsV2Result listObjects; | |
do { | |
listObjects = amazonS3.listObjectsV2(bucket, path); | |
for (S3ObjectSummary object : listObjects.getObjectSummaries()) { | |
amazonS3.deleteObject(new DeleteObjectRequest(bucket, object.getKey())); | |
} | |
listObjects.setContinuationToken(listObjects.getNextContinuationToken()); | |
} while (listObjects.isTruncated()); | |
try { | |
amazonS3.deleteObject(bucket, path); | |
} catch (AmazonServiceException e) { | |
throw new CustomException(S3_DELETE_OBJECTS_EXCEPTION); | |
} | |
} | |
@Async | |
public void deleteAllOfListImages(Long listId) { | |
String path = getCurrentProfile() + "/lists_item/" + listId + "/"; | |
try { | |
deleteAllObjectsInPath(path); | |
} catch (AmazonServiceException e) { | |
throw new CustomException(ErrorCode.S3_DELETE_OBJECTS_EXCEPTION); | |
} | |
} | |
private void deleteAllObjectsInPath(String path) { | |
ListObjectsV2Result listObjects; | |
do { | |
listObjects = amazonS3.listObjectsV2(bucket, path); | |
for (S3ObjectSummary object : listObjects.getObjectSummaries()) { | |
amazonS3.deleteObject(new DeleteObjectRequest(bucket, object.getKey())); | |
} | |
listObjects.setContinuationToken(listObjects.getNextContinuationToken()); | |
} while (listObjects.isTruncated()); | |
} | |
public void deleteFile(Long listId) throws IOException { | |
String path = "local/lists_item/8/9af94837-fe02-4cc7-a1df-a445be84d3bf.png"; | |
try { | |
amazonS3.deleteObject(bucket, path); | |
} catch (AmazonServiceException e) { | |
throw new CustomException(ErrorCode.S3_DELETE_OBJECTS_EXCEPTION); | |
} | |
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
테스트.. 제가 해봤어야 했는데 대신해주셔서 감사해요 🥲
역시 S3 장인이시군요 👍
Description
ImageService
에 만들어두었습니다.GPT랑 짰는데 제대로 동작할지는 모르겠네요...
S3 전문가 정수님이 한번 봐주시면 감사하겠습니다 😅
Relation Issues