진짜 개발자
본문 바로가기

FrameWork/Spring MVC

SpringMVC - 핸들러 메소드 - 7 (파일업로드 매개변수 : MultipartFile)

728x90
SpringMVC - 핸들러 메소드 - 7 (파일업로드 매개변수 MultiFile)

이번 시간에는 파일 업로드 요청을 처리하는 핸들러를 작성하는 방법을 알아보도록 하겠습니다.

 

 

1. MultipartFile

1.1 MultipartFile 란?

MultipartFile이란 사용자가 업로드한 File을 핸들러에서 손쉽게 다룰 수 있도록 도와주는 Handler의 매개변수중 하나입니다.

 

*MultipartFile 매개변수를 사용하기 위해서는 MultipartResolver Bean이 등록되어있어야 합니다. 이전 포스팅에서 다루었던 https://galid1.tistory.com/528에서 말씀드렸듯이, DispatcherServlet은 처음 초기화 되는 과정에서 Web서비스를 위해 필요한 기본적인 Bean들을 개발자가 설정한 Bean을 등록하거나, 설정한 것이 없는 경우 기본전략에 의해 자동으로 등록을 합니다. 하지만 MultipartResolverSpringMVC에서 기본으로 등록해주지 않습니다.

 

하지만 SpringBoot에서는 위와 같이 MultipartAutoConfiguration클래스에서 MultipartResolver Bean이 등록되어있지 않는 경우 자동으로 Bean을 등록해줍니다. 따라서 SpringBoot를 사용한다면 별도의 설정없이 MultipartFile 매개변수를 사용할 수 있습니다.

 

 

 

1.2 MultipartFile 예제

사용자가 파일을 업로드 했을때, 업로드한 파일의 이름을 출력해주는 예제를 작성해보겠습니다.

 

getFile() 핸들러의 경우 /file로 오는 get 요청을 받아들이며, upload를 위한 html을 사용자에게 전달해줍니다. 또한 postFile()핸들러에서 FlashAttributes를 통해 전달하는 데이터를 자동으로 Model에 담아서 view에서 사용할 수 있도록 합니다.

 

postFile()핸들러의 경우는 사용자가 업로드한 데이터를 MultipartFile매개변수에 맵핑합니다. 이때 upload 요청이 parameter를 통해 넘어오기 때문에 @ReqeustParam을 이용했습니다. 또 업로드한 File의 이름을 이용해 문자열을 만들어 FlashAttributes에 담아 /file로 다시 redirect 했습니다. 실제로는 해당 file을 저장소에 저장하는 로직이 필요할 것입니다.

 

다음의 경로에 file.html을 생성합니다.

 

file.html은 message에 해당하는 modelAttribute가 존재하는 경우(file을 업로드한 경우) <h3>태그를 통해 해당 message를 html에 뿌려줍니다. <input type="file name="file"> 에서 name은 당연히 handler에서 맵핑하는 @RequestParam의 value와 같아야 합니다.

 

http://localhost:8080/file로 접속한 뒤 파일선택 버튼을 클릭하여 파일을 선택한 뒤 업로드 버튼을 클릭하여 file 업로드 요청을 보냅니다.

 

파일 이름이 출력됩니다.




1.3 PostMan으로 FileUpload 테스팅


PostMan을 통해서 file Upload를 테스팅하기 위해서는 위와 같이 설정하여 테스팅 하면 됩니다.

METHOD : POST

TYPE : form-data

KEY :  handler에서 받아들이는 parameter key

VALUE : 업로드할 file


form-data에 file을 업로드 하기 위해서는 key를 입력하는 칸의 오른쪽의 key type을 file로 우선 변경합니다.


그렇게 하면 자동으로 value에 file을 업로드할 수 있는 버튼이 생겨납니다.