게시글 CRUD 기능을 구현하면서 텍스트만 받는게 아니라 이미지파일도 같이 받을 수 있는 기능을 생각해야 했다.
일단 이미지파일을 저장할 DB는 팀원분이 S3를 이용한 방법으로 기능을 구현해 주셨다.
우선 컨트롤러를 살펴보자면
// PostController.java
@PostMapping("")
public ResponseEntity<PostResponseDto> createPost(
@ModelAttribute PostRequestDto postRequestDto, // @RequestBody -> @ModelAttribute
@AuthenticationPrincipal UserDetailsImpl userDetails
){
...
}
원래는 @RequestBody 어노테이션으로 json형태로 데이터를 받았지만 MultipartFile을 받기 위해 form-data 형식으로 데이터를 받기로 했고, 그에 따라 @RequestBody 가아니라 @ModelAttirbute 어노테이션으로 바꿔주었다.
@Getter
@Setter
public class PostRequestDto {
private String title;
private String content;
private MultipartFile imageFile;
private String filename;
}
데이터가 담겨있는 PostRequstDto를 살펴보면 처음 받아올때 filename 은 null로 비어있다. 그리고 MultipartFile 형태로 이지파일을 받아온다. 여기서 받아온 MultipartFile을 S3에 저장하는 과정에서 변환된 파일이름이 filename에 담긴 후 메서드가 실행된다.
String filename = s3Util.uploadImage(S3_DIR_POST,postRequestDto.getImageFile());
postRequestDto.setFilename(filename);
PostResponseDto postResponseDto = postService.createPost(postRequestDto, userDetails.getUser());
return ResponseEntity.ok(postResponseDto);
'개발일지' 카테고리의 다른 글
20231211 - 백오피스 프로젝트 KPT 회고 (0) | 2023.12.11 |
---|---|
20231211- QueryDSL사용해보기 (0) | 2023.12.11 |
20231206 - @CreatedDate, @LastModifiedDate (1) | 2023.12.06 |
20231205 - 프로그래머스/42748 (1) | 2023.12.05 |
20231204 - 프로그래머스/12915 (2) | 2023.12.04 |