Skip to content

Commit

Permalink
[BE] feat : AWS S3 파일 삭제 기능 수정 및 리팩토링
Browse files Browse the repository at this point in the history
  • Loading branch information
Anak-2 committed Mar 21, 2024
1 parent 5bc7d2f commit e0eb120
Show file tree
Hide file tree
Showing 12 changed files with 66 additions and 54 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import booki_today.dto.file.FileAddRequest;
import booki_today.dto.file.FileDeleteRequest;
import booki_today.implement.file.FileDeleter;
import booki_today.implement.file.FileRemover;
import booki_today.implement.file.FileUploader;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
Expand All @@ -11,18 +11,18 @@
public class FileService {

private final FileUploader fileUploader;
private final FileDeleter fileDeleter;
private final FileRemover fileRemover;

public FileService(final FileUploader fileUploader, final FileDeleter fileDeleter) {
public FileService(final FileUploader fileUploader, final FileRemover fileRemover) {
this.fileUploader = fileUploader;
this.fileDeleter = fileDeleter;
this.fileRemover = fileRemover;
}


public void uploadFile(FileAddRequest fileAddRequest, MultipartFile multipartFile){
fileUploader.uploadFile(fileAddRequest, multipartFile);
}

public void deleteFile(FileDeleteRequest fileDeleteRequest){
fileDeleter.deleteFile(fileDeleteRequest);
fileRemover.deleteFile(fileDeleteRequest);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

@Builder
public record FileAddRequest(
String uploadFilePath
String uploadFilePath,
String studentId
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@

public record FileDeleteRequest(
String uploadFilePath,
String uuidFileName
String fileName
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

@Configuration
public class AwsConfig {

@Value("${cloud.aws.credentials.access-key}")
private String accessKey;

Expand All @@ -26,6 +27,7 @@ public class AwsConfig {
private AWSCredentials getAWSCredentials() {
return new BasicAWSCredentials(accessKey, secretKey);
}

@Bean
public AmazonSimpleEmailService amazonSimpleEmailService() {
return AmazonSimpleEmailServiceClientBuilder.standard()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@

public enum FileExceptionConstant {

FILE_UPLOAD_ERROR("파일 업로드 도중에 에러가 발생했습니다. 관리자에게 문의 바랍니다.");
FILE_UPLOAD_ERROR("파일 업로드 도중에 에러가 발생했습니다. 관리자에게 문의 바랍니다."),
FILE_DELETE_ERROR("파일 삭제 도중에 에러가 발생했습니다. 관리자에게 문의 바랍니다.");
private final String message;

FileExceptionConstant(final String message) {
Expand Down
22 changes: 0 additions & 22 deletions backend/src/main/java/booki_today/implement/file/FileDeleter.java

This file was deleted.

37 changes: 37 additions & 0 deletions backend/src/main/java/booki_today/implement/file/FileRemover.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package booki_today.implement.file;

import booki_today.dto.file.FileDeleteRequest;
import booki_today.global.annotation.Implement;
import booki_today.global.error.InternalServerException;
import com.amazonaws.SdkClientException;
import com.amazonaws.services.s3.AmazonS3;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;

import static booki_today.global.constant.FileExceptionConstant.FILE_DELETE_ERROR;

@Implement
@Slf4j
public class FileRemover {

private final AmazonS3 amazonS3;
@Value("${cloud.aws.s3.bucket}")
private String bucketName;

public FileRemover(final AmazonS3 amazonS3) {
this.amazonS3 = amazonS3;
}

public void deleteFile(final FileDeleteRequest fileDeleteRequest){
try{
String uploadFilePath = fileDeleteRequest.uploadFilePath();
String fileName = fileDeleteRequest.fileName();
String key = uploadFilePath+"/"+fileName;

amazonS3.deleteObject(bucketName, key);
}catch (SdkClientException e){
log.error("Exception [Err_Location]: {}", e.getStackTrace()[0]);
throw new InternalServerException(FILE_DELETE_ERROR.message());
}
}
}
16 changes: 5 additions & 11 deletions backend/src/main/java/booki_today/implement/file/FileUploader.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,20 +24,19 @@
public class FileUploader {

private final AmazonS3 amazonS3;
private final String bucketName;
@Value("${cloud.aws.s3.bucket}")
private String bucketName;

public FileUploader(final AmazonS3 amazonS3, @Value("${cloud.aws.s3.bucket}") final String bucketName) {
public FileUploader(final AmazonS3 amazonS3) {
this.amazonS3 = amazonS3;
this.bucketName = bucketName;
}

public void uploadFile(final FileAddRequest fileAddRequest, final MultipartFile multipartFile) {
String uploadFilePath = fileAddRequest.uploadFilePath();
List<FileAddRequest> s3files = new ArrayList<>();

String originalFileName = multipartFile.getOriginalFilename();
String uploadFileName = getUuidFileName(originalFileName);
String uploadFileUrl = "";
String uploadFileName = fileAddRequest.studentId()+"-"+originalFileName;

ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentLength(multipartFile.getSize());
Expand All @@ -51,16 +50,11 @@ public void uploadFile(final FileAddRequest fileAddRequest, final MultipartFile
new PutObjectRequest(bucketName, keyName, inputStream, objectMetadata)
.withCannedAcl(CannedAccessControlList.PublicRead));

uploadFileUrl = amazonS3.getUrl(bucketName, keyName).toString();
String uploadFileUrl = amazonS3.getUrl(bucketName, keyName).toString();

} catch (IOException e) {
log.error("Exception [Err_Location]: {}", e.getStackTrace()[0]);
throw new InternalServerException(FILE_UPLOAD_ERROR.message());
}
}

public String getUuidFileName(final String fileName) {
String ext = fileName.substring(fileName.indexOf(".") + 1);
return UUID.randomUUID() + "." + ext;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,15 @@ public class MailSender {

private final AmazonSimpleEmailService amazonSimpleEmailService;
private final TemplateEngine htmlTemplateEngine;
private final String from;
@Value("${cloud.aws.ses.from}")
private String from;

public MailSender(
final AmazonSimpleEmailService amazonSimpleEmailService,
final TemplateEngine htmlTemplateEngine,
@Value("${cloud.aws.ses.from}") final String from
final TemplateEngine htmlTemplateEngine
) {
this.amazonSimpleEmailService = amazonSimpleEmailService;
this.htmlTemplateEngine = htmlTemplateEngine;
this.from = from;
}

public void send(final MailSendRequest mailSendRequest) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,13 @@ public FileController(FileService fileService) {
}

@PostMapping(value = "/files")
public void uploadFiles(@RequestPart(value = "fileAddRequest") FileAddRequest fileAddRequest,
public void uploadFile(@RequestPart(value = "fileAddRequest") FileAddRequest fileAddRequest,
@RequestPart(value = "file") MultipartFile multipartFile) {
fileService.uploadFile(fileAddRequest, multipartFile);
}

@DeleteMapping("/files")
public void deleteFile(@RequestBody FileDeleteRequest fileDeleteRequest){
public void deleteFile(@RequestBody FileDeleteRequest fileDeleteRequest){
fileService.deleteFile(fileDeleteRequest);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,18 @@
class MailSenderTest extends ImplementTest {

@Mock
AmazonSimpleEmailService amazonSimpleEmailService;
private AmazonSimpleEmailService amazonSimpleEmailService;
@Autowired
TemplateEngine htmlTemplateEngine;
private TemplateEngine htmlTemplateEngine;
@Value("${cloud.aws.ses.from}")
String from;
private String from;
@InjectMocks
MailSender mailSender;
private MailSender mailSender;

@BeforeEach
void setUp() {
MockitoAnnotations.initMocks(this); // Mock 초기화
mailSender = new MailSender(amazonSimpleEmailService, htmlTemplateEngine, from);
mailSender = new MailSender(amazonSimpleEmailService, htmlTemplateEngine);
}

@DisplayName("메일 전송 테스트")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ class FileControllerTest extends ControllerTest {

@DisplayName("S3 파일 업로드 테스트")
@Test
void uploadFileTest() throws Exception{
void uploadFileTest() throws Exception {

}

Expand Down

0 comments on commit e0eb120

Please sign in to comment.