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번 인덱스의 데이터의 썸네일이 불려오는 것을 확인할 수 있다.

+ Recent posts