Skip to content

Commit

Permalink
Merge pull request #19 from Team-GAJI/config/#17-RDS-S3/GAJI-27
Browse files Browse the repository at this point in the history
✨ [Feature] S3 관련 기능 추가
  • Loading branch information
mmingoo authored Jul 21, 2024
2 parents df1f5b9 + 9075503 commit 85068d6
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 2 deletions.
30 changes: 28 additions & 2 deletions src/main/java/gaji/service/aws/s3/AmazonS3Manager.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,17 @@
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.PutObjectRequest;
import gaji.service.config.AmazonConfig;
import gaji.service.global.exception.RestApiException;
import gaji.service.global.exception.code.status.GlobalErrorStatus;
import gaji.service.util.uuid.Uuid;
import gaji.service.util.uuid.UuidRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.UUID;

@Slf4j
@Component
Expand All @@ -23,15 +27,37 @@ public class AmazonS3Manager{

private final UuidRepository uuidRepository;

public String uploadFile(String keyName, MultipartFile file){
public String uploadFile(String keyName, MultipartFile file) throws IOException{
// generateKeyName() 메소드로 keyName 받아오기
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentLength(file.getSize());

amazonS3.putObject(new PutObjectRequest(amazonConfig.getBucket(), keyName, file.getInputStream(), metadata));

try {
amazonS3.putObject(new PutObjectRequest(amazonConfig.getBucket(), keyName, file.getInputStream(), metadata));
}catch (IOException e){
log.error("error at AmazonS3Manager uploadFile : {}", (Object) e.getStackTrace());
throw new RestApiException(GlobalErrorStatus._S3_UPLOAD_ERROR);
}

return amazonS3.getUrl(amazonConfig.getBucket(), keyName).toString();
}

public void deleteFile(String keyName) {
try {
amazonS3.deleteObject(amazonConfig.getBucket(), keyName);
}catch (Exception e){
throw new RestApiException(GlobalErrorStatus._S3_DELETE_ERROR);
}

}

public String generateKeyName(MultipartFile file, String directoryPath) { // 추후 서비스 단에서 디렉터리에 따른 패스 가져오기
String uuid = UUID.randomUUID().toString();
Uuid savedUuid = uuidRepository.save(Uuid.builder()
.uuid(uuid).build());

return directoryPath + '/' + file.getOriginalFilename() + savedUuid;
}

}
12 changes: 12 additions & 0 deletions src/main/java/gaji/service/config/AmazonConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,18 @@ public class AmazonConfig {
@Value("${cloud.aws.s3.bucket")
private String bucket;

@Value("${cloud.aws.s3.path.blog")
private String blogPath;

@Value("${cloud.aws.s3.path.project")
private String projectPath;

@Value("${cloud.aws.s3.path.question")
private String questionPath;

@Value("${cloud.aws.s3.path.study")
private String studyPath;

@PostConstruct
public void init() {
this.awsCredentials = new BasicAWSCredentials(accessKey, secretKey);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@ public enum GlobalErrorStatus implements BaseErrorCodeInterface {
_METHOD_ARGUMENT_ERROR(HttpStatus.BAD_REQUEST, "COMMON405", "Argument Type이 올바르지 않습니다."),
_INTERNAL_PAGE_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "COMMON500", "페이지 에러, 0 이상의 페이지를 입력해주세요"),

// S3 관련 에러
_S3_UPLOAD_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "S3_5001", "파일 업로드에 실패했습니다."),
_S3_DELETE_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "S3_5002", "파일 삭제에 실패했습니다."),

// For test
TEMP_EXCEPTION(HttpStatus.BAD_REQUEST, "TEMP4001", "예외처리 테스트입니다."),
;
Expand Down

0 comments on commit 85068d6

Please sign in to comment.