@Slf4j@Controller@RequestMapping("/servlet/v1")publicclassServletUploadControllerV1{@GetMapping("/upload")publicStringnewFile(){return"upload-form";}@PostMapping("/upload")publicStringsaveFileV1(HttpServletRequestrequest)throwsServletException,IOException{log.info("request={}", request);String itemName =request.getParameter("itemName");log.info("itemName={}", itemName);Collection<Part> parts =request.getParts();log.info("parts={}", parts);return"upload-form";}}
upload-form.html
application.properties
실행해보면 로그에 multipart/form-data방식으로 전송이 됐다.
멀티파트 사용 옵션
용량이 큰 파일이 무제한 업로드 되는 것을 제한할 수 있다. 사이즈를 넘으면 예외(SizeLimitExceedException)가 발생한다.
max-file-size : 파일 하나의 최대 사이즈, 기본 1MB
max-request-size : 요청 하나에 여러 파일들의 전체 합, 기본 10MB
또 spring.servlet.multipart.enabled=false가 있다. 멀티파트는 일반적인 폼 요청(application/x-www-form-urlencoded)보다 훨씬 복잡하다. 이 옵션을 끄면 서블릿 컨테이너는 멀티파트와 관련된 처리를 하지 않는다. (default: true)
V2
이제 파일을 받아야 하는데 파일이 저장되는 경로가 필요하다.
application.properties
컨트롤러
멀티파트 형식은 전송 데이터를 하나하나 각각 부분(Part)으로 나누어 전송하는데 parts에는 이렇게 나누어진 데이터가 각각 담긴다. 서블릿이 제공하는 Part는 멀티파트 형식을 편리하게 읽을 수 있는 다양한 메서드를 제공한다.