Spring과 파일 업로드

    스프링은 MultipartFile 이라는 인터페이스로 멀티파트 파일을 매우 편리하게 지원한다.

     

    SpringUploadController

    package hello.upload.controller;
    
    import jakarta.servlet.http.HttpServletRequest;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.File;
    import java.io.IOException;
    
    @Slf4j
    @Controller
    @RequestMapping("/spring")
    public class SpringUploadController {
    
        @Value("${file.dir}")
        private String fileDir;
    
        @GetMapping("/upload")
        public String newFile(){
            return "upload-form";
        }
    
        @PostMapping("/upload")
        public String saveFile(@RequestParam String itemName,
                               @RequestParam MultipartFile file, HttpServletRequest request) throws IOException {
            log.info("request={}", request);
            log.info("itemName={}", itemName);
            log.info("multipartFile={}", file);
    
            if (!file.isEmpty()){
                String fullPath = fileDir + file.getOriginalFilename();
                log.info("파일 저장 fullPath={}", fullPath);
                file.transferTo(new File(fullPath));
            }
    
            return "upload-form";
        }
    }

    코드를 보면 스프링 답게 딱 필요한 부분의 코드만 작성하면 된다.

     

    @RequestParam MultipartFile file 업로드하는 HTML Form의 name에 맞추어 @RequestParam 을 적용하면 된다.

    추가로 @ModelAttribute 에서도 MultipartFile 을 동일하게 사용할 수 있다.

     

    MultipartFile 주요 메서드

    • file.getOriginalFilename() : 업로드 파일 명
    • file.transferTo(...) : 파일 저장

    실행 로그

    request=org.springframework.web.multipart.support.StandardMultipartHttpServletRequest@5c022dc6
    itemName=java
    multipartFile=org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile@274ba730
    파일 저장 fullPath=c:/springMvcUpload/file/java.PNG

     

    'SPRING' 카테고리의 다른 글

    커넥션 풀(Connection Pool)과 데이터소스 이해  (0) 2024.01.12
    JDBC 이해  (1) 2024.01.11
    서블릿과 파일 업로드  (1) 2024.01.03
    스프링이 제공하는 기본 포맷터  (0) 2023.12.31
    포맷터 - Formatter  (0) 2023.12.30

    댓글