스프링 [Spirng] 파일 업로드(multipart....)에 대한 정리

반응형

파일을 업로드할 경우 HTML 폼의 enctype 속성 값으로 multipart/form-data를 사용한다.

<form method="post" enctype="multipart/form-data">

....

</form>

인코딩 타입이 multipart/form-data인 경우, 파라미터나 업로드한 파일 데이터를 사용하려면 전송 데이터를 정확하게 처리해 주어야한다. 스프링은 멀티파트 형식을 지원하고 있다.

MultipartResolver 설정

멀티파트 지원 기능을 사용하기 위해 MultipartResolver을 스프링 설정파일에 등록해주어야한다.

MultipartResolver은 멀티파트 형식으로 데이터가 전송된 경우, 해당 데이터를 스프링 mvc에서 사용할 수 있도록 변환해주는 역할이다.

ex) @RequestParam 어노텐션을 이용해 멀티파트로 전송된 파라미터 값과 파일 데이터를 사용할수 있게 해준다.

스프링이 기본을 제공하는 MultipartResolver은

  • o. s. web. multipart. commons. CommonsMultipartResolver ( Commons FileUpload API를 이용해 멀티파트 데이터를 처리한다. )
  • o. s. web. multipart. support. StandardServletMultipartResolver ( 서블릿 3.0의 Part를 이용해 멀티파트 데이터를 처리한다. )

두 멀티파트 구현체 중 하나를 스프링 빈으로 등록해주면 된다. 스프링 빈의 이름은 multipartResolver이어야한다.

DispatcherServlet은 이름이 multipartResolver인 빈을 사용하기때문이고 다른 이름을 사용할 경우 MultipartResolver로 사용되지 않는다.

Commons FileUpload를 이용하기 위한 설정

  • CommonsMultipartResolver을 MultipartResolver로 사용하기 위해 빈등록 처리로는

CommonsMultipartResolver 방식

fileupload 업로드 라이브러리 다운로드

서블릿3 의 파일 업로드기능 사용을 위한 설정

*.do , / , *.ao 등등 설정한 DispatcherServlet에 추가적으로 멀티파트를 처리할 수 있도록 설정해주어야한다.

web.xml( multipart-config )설정

<multipart- config>의 설정 관련 태그

<multipart-config>태그에서 사용될수 있는 설정정보

DispatcherServlet가 서블릿 3의 파일 업로드 기능을 사용할 수 있도록 multipart-config를 설정했으면 스피링 설정에서 StandardServletMultipartResolver을 빈으로 등록해준다.

controller.xml(사용하려는 컨트롤러 빈 등록된곳에 적용)

StandardServletMultipartResolver은 서블릿3 버전 이상만 지원하기에 톰캣 6 버전과 같이 서블릿 2.5또는 그이하를 지원하는 웹 컨테이너에선 제대로 동작하지 않는다.

DispatcherServlet가 사용하는 스프링 설정에 MultipartResolver을 등록했으면, 업로드한 파일 데이터를 컨트롤러에서 사용할 수 있게 된다. 스프링은 파일 데이터에 접근할 수 있는 다양한 방법을 제공하고 있다

  • MultipartFile 인터페이스 사용
    • o. s. web. multipart. MultipartFile 인터페이스는 업로드 한 파일 정보 및 파일 데이터를 표현하기 위한 용도로 사용되며, 이 인터페이스를 이용해서 업로드한 파일 데이터를 읽을 수 있다.

메서드

업로드한 파일 데이터를 구하는 가장 단순한 방법은 MultipartFile.getBytes()메서드를 이용하는 것이다. 바이트 배열을 구한 뒤 파일이나 DB등에 저장하면 된다.

사용될 set, get 메서드 

업로드 될 코드

반응형