본문 바로가기
개발/Java

[JAVA] Thumbnails을 이용한 ImageUpload resize 적용하기

by 코딩하는 흰둥이 2024. 7. 16.

SpringBoot 환경에서 진행되어 

@RestController 로 파일 데이터를 받고 보내고 있다

이미지 파일 전송 받식은 이전글을 참고하길 바란다

https://greed-yb.tistory.com/265

 

[SpringBoot] Summernote Editor(이미지,동영상 삽입) 적용하기 -1

Summernote Editor 다운로드 주소https://summernote.org/#google_vignette Summernote - Super Simple WYSIWYG editorSuper Simple WYSIWYG Editor on Bootstrap Summernote is a JavaScript library that helps you create WYSIWYG editors online.summernote.org 

greed-yb.tistory.com

 

 

 

Maven
        <!-- thumbnailator -->
        <dependency>
            <groupId>net.coobird</groupId>
            <artifactId>thumbnailator</artifactId>
            <version>0.4.14</version>
        </dependency>

 

 

 

Controller
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.UUID;

import net.coobird.thumbnailator.Thumbnails;

@RestController
@Tag(name="Swagger upload", description = "upload")
@RequestMapping("/upload/*")
public class ImageUpload {
    // 파일 업로드 경로
    final Path FILE_ROOT = Paths.get("./").toAbsolutePath().normalize();
    private String uploadPath = FILE_ROOT.toString() + "/upload/image/";
    
@Operation(summary = "프로필 이미지 업로드 ", description = "프로필 이미지를 서버에 업로드한다.")
    @PostMapping("/profileUpload")
    public ResponseEntity<?> profileUpload(@RequestParam MultipartFile file) throws Exception{

            if(file.isEmpty()){
                return ResponseEntity.badRequest().body("파일이 비어있습니다. 확인해주세요.");
            }

            try{

                // 업로드 파일의 이름
                String originalFileName = file.getOriginalFilename();

                // 업로드 파일의 확장자
                String fileExtension = originalFileName.substring(originalFileName.lastIndexOf("."));

                // 업로드 된 파일이 중복될 수 있어서 파일 이름 재설정
                String reFileName = UUID.randomUUID().toString() + fileExtension;

                // 프로필(증명사진) 이미지 117 x 156
                String profileImageName = "profile_"+reFileName;
                Path resizedFilePath = Paths.get(uploadPath, profileImageName);

                try(InputStream inputStream = file.getInputStream()) {
                    Thumbnails.of(inputStream).size(117, 156).toFile(resizedFilePath.toFile());
                }
                
                // 상단 프로필 이미지 32 x 32
                String topFileImageName = "topFile_"+reFileName;
                Path resizedTopFilePath = Paths.get(uploadPath, topFileImageName);

                try(InputStream inputStream = file.getInputStream()) {
                    Thumbnails.of(inputStream).size(32, 32).toFile(resizedTopFilePath.toFile());
                }

                // 파일이름을 재전송
                return ResponseEntity.ok(profileImageName);
            }catch (IOException e){
                return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("이미지 업로드 실패하였습니다.");
            }
    }

}

 

 

 

 

TEST

 

댓글