CREATE TABLE `worldcup`.`tournaments`
(
`index` INT UNSIGNED NOT NULL AUTO_INCREMENT, #인덱스(PK)
`user_email` VARCHAR(50) NOT NULL, #해당 토너먼트 만든 유저 이메일(FK)
`thumbnail` LONGBLOB NOT NULL, #해당 대회의 썸네일
`thumbnail_file_name` VARCHAR(256) NOT NULL, #썸네일 파일 이름
`thumbnail_content_type` VARCHAR(50) NOT NULL, #썸네일 타입
`title` VARCHAR(50) NOT NULL, #대회 이름
`content` VARCHAR(1000) NOT NULL, #대회 설명
`play_count` INT UNSIGNED NOT NULL DEFAULT 0, #플레이 횟수
`created_at` DATETIME NOT NULL DEFAULT NOW(), #만든날짜
`modified_at` DATETIME NULL DEFAULT NULL, #수정날짜
`is_recognize` BOOLEAN NOT NULL DEFAULT FALSE, #승인여부
CONSTRAINT PRIMARY KEY (`index`),
CONSTRAINT FOREIGN KEY (`user_email`) REFERENCES `worldcup`.`users` (`email`) #FK설정 (이메일 삭제되어도 토너먼트는 삭제안됨)
);
일단 DB 테이블을 다음과 같이 작성한다. 썸네일 부분을 보면 썸네일 데이터를 저장하는 `thumbnail`, 썸네일 파일 이름을 저장하는 `thumbnail_file_name`, 썸네일의 타입(jpg 같은것)을 저장하는 `thumbnail_content_type`이 있다.
tournament.setThumbnail(thumbnail.getBytes());
tournament.setThumbnailFileName(thumbnail.getOriginalFilename());
tournament.setThumbnailContentType(thumbnail.getContentType());
멀티 파트 파일 형식으로 해당 이미지 파일을 불러와서 엔티티에 다음과 같이 정의하고 db에 저장한다.
그럼 db에 다음과 같이 이미지 데이터가 저장되었다.
// 토너먼트 선택
public TournamentEntity get(int index) {
return this.tournamentMapper.selectTournamentByIndex(index);
}
먼저 해당 데이터를 불러오는 Mapper를 만든 후, 서비스에서 다음과 같이 작성하고
@RequestMapping(value = "/thumbnail", method = RequestMethod.GET)
public ResponseEntity<byte[]> getTournamentThumbnail(@RequestParam("index") int index) {
TournamentEntity tournament = this.tournamentService.get(index);
if (tournament == null) {
return ResponseEntity.notFound().build(); // Not Found (404)
}
return ResponseEntity.ok() // OK (200)
.contentType(MediaType.parseMediaType(tournament.getThumbnailContentType()))
.contentLength(tournament.getThumbnail().length)
.body(tournament.getThumbnail());
}
컨트롤러 부분에 가서 다음과 같이 작성한다. /thumbnail?index=1 주소로 가면 1번 인덱스의 데이터의 썸네일이 불려오는 것을 확인할 수 있다.
'Spring' 카테고리의 다른 글
[Thymeleaf] 날짜 포맷 (0) | 2024.12.06 |
---|---|
[Spring Boot] 비밀번호 암호화, @Transactional (0) | 2024.04.03 |
[Spring Boot] 인증번호 (0) | 2024.04.01 |
[Spring] 백엔드단에서 정규식 불러오기 (0) | 2024.03.28 |
[Spring Boot] HttpSession 을 이용하여 로그인 상태 유지하기 (0) | 2024.03.11 |