🌿SPRING/🌱연습[SPRING]

[SPRING][AWS] 게시글 이미지 업로드하기 (4) - 썸네일 이미지 같이 업로드 하기 (Thumbnailator, Gradle)

디카페인라떼 2022. 10. 12. 20:24
더보기

전체 조회 시에 이미지가 업로드된 게시글들의 섬네일을 같이 뿌려주기로 하였다. 찾아보니 S3에 람다를 사용하여서도 하던데 나는 thumbnailator 를 이용하여 간단하게 구현했다. 

썸네일 이미지?
  • 작은 이미지 / 큰 파일을 열지 않고도 내용을 알 수 있도록 축소된 이미지

Dependency 추가 

https://mavenlibs.com/maven/dependency/net.coobird/thumbnailator

<!-- https://mavenlibs.com/maven/dependency/net.coobird/thumbnailator -->
<dependency>
    <groupId>net.coobird</groupId>
    <artifactId>thumbnailator</artifactId>
    <version>0.4.17</version>
</dependency>

 

S3Upload(Service)
  • 썸네일 이미지 업로드하는 부분을 추가해준다.
 // MultipartFile을 전달받아 File로 전환한 후 썸네일로 전환하여 S3에 업로드
  public String uploadThumbFile (MultipartFile multipartFile, String thumbDirName) throws IOException{
    //multipart로 받은 파일을 일단 convert 한 뒤에   
    File uploadFile = convert(multipartFile)
        .orElseThrow(() -> new IllegalArgumentException("MultipartFile -> File 전환 실패"));
    //Thumnailator를 이용하여 크기를 지정하여 썸네일을 만들어준다음
    BufferedImage bufferedImage = Thumbnailator.createThumbnail(uploadFile, 256, 224);
    
    //BufferedImage를 file로 변환해 준다음 
    File uploadThumbFile = new File("thumbs.jpg");
    ImageIO.write(bufferedImage,"jpg",uploadThumbFile);
    
    //convert한 파일은 local에 저장되므로 꼭 삭제해주기!
    removeNewFile(uploadFile);

    return upload(uploadThumbFile, thumbDirName); //S3에 업로드 해준다!
  }

 

Service 
  • 비지니스 로직에도 추가를 해준다.
        String meetingImage = null;
        String meetingThumbImage = null;

        if (image != null && !image.isEmpty()) {
            try {
                //메인 이미지 저장
                meetingImage = s3Upload.uploadFiles(image, "images");
                log.info(meetingImage);
                //섬네일 이미지 저장
                meetingThumbImage = s3Upload.uploadThumbFile(image, "thumbs");
                log.info(meetingThumbImage);
            } catch (IOException e) {
                log.error(e.getMessage());
            }
        }

👉S3에 잘 들어온걸 확인할 수 있다!!! 용량도 원본이미지보다 작다!