스프링 부트로 파일을 업로드하는 것은 아주 단순한 설정만으로도 가능하다.

  1. 별도의 파일 업로드 라이브러리(commons - fileupload)를 이용하는 경우
  2. Servlet 3버전부터 추가된 자체적인 파일 업로드 라이브러리를 이용하는 방식

8.1 파일 업로드를 위한 설정

스프링부트 내장 WAS인 톰캣을 이용해서 실행한다면 별도의 추가적인 라이브러리 없이 yaml 파일을 수정하는 것만으로 충분하다.

spring:      
  servlet:
    multipart:
      enabled: true           # 파일 업로드 가능 여부를 선택
      location:               # 저장할 위치
      max-request-size: 30MB  # 한 번에 최대 업로드 가능 용량
      max-file-size: 10MB     # 파일 하나의 최대 크기

8.1.1 Controller에서 사진 받기

@RestController
@Slf4j
public class UploadController {

    @PostMapping("/file")
    public void uploadFile(MultipartFile[] uploadFiles) {
        
        for (MultipartFile file : uploadFiles) {
            
            //실제 파일 이름 IE나 Edge는 전체 경로가 들어옴
            String originalName = file.getOriginalFilename();
            String fileName = originalName.substring(originalName.lastIndexOf("\\\\") + 1);
            
            log.info("fileName: {}", fileName);
        }
    }
}

8.1.2 업로드된 파일의 저장

파일이 업로드되었다면 저장을 해야 한다.

스프링 자체에서 제공하는 FileCopyUtils를 이용할 수도 있고, MultipartFile 자체에도 transferTo() 메서드를 이용해 간단히 파일을 저장할 수 있다.

파일을 저장할 경로는 설정 파일에서 지정하여 사용하자!

io:
  dongyeop:
    upload:
      path: //저장할 위치 #/usr/dongyeop