[Spring] 스프링 MVC - 파일 업로드 처리, 다운로드 처리

5996 단어 SpringSpring
  1. 화면단에서는 파일처리를 위해 form 태그내에 enctype 및 전송 방식 설정
    HTML form 태그의 enctype 속성을 "multipart/form-data"로 설정 method 속성을 "post"로 설정

ex)

<form method="post" enctype="multipart/form-data">
  ...
</form>
  1. 파일업로드에 필요한 jar 라이브러리를 추가
  • 일반 웹 프로젝트의 경우 WEB-INF/lib폴더에 라이브러리 추가
  • Maven을 이용할 경우 pom.xml의 dependency 태그를 추가

ex)

<dependency>
	<groupId>commons-fileupload</groupId>
    	<artifactId>commons-fileupload</artifactId>
    	<version>1.3.1</version>
</dependency>
  1. 스프링 설정파일에 MultipartResolver 설정
  • Multipart 지원 기능을 사용하려면 먼저 MultipartResolver를 스프링 설정 파일에 등록. 스프링에서 기본으로 제공하는 MultipartResolver는 CommonsMultipartResolver이다. ComonsMultipartResolver를 MultipartResolver로 사용하려면 다음과 같이 빈 이름으로 "multipartResolver"를 사용해서 등록
  • DispatcherServlet은 이름이 "multipartResolver"인 빈을 사용하기 때문에 다른 이름(bean id)을 지정할 경우 MultipartResolver로 사용되지 않음

<bean id="martipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />

또는 CommonsMultipartResolver의 프로퍼티를 이용하여 최대 가능한 업로드 사이즈 등 지정 가능

<bean id="multipartResolver class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
	<property name="maxUploadSize" value="2000000" />
</bean>

CommonsMultipartResolver 클래스의 프로퍼티

프로퍼티 타입 설명
maxUploadSize long 최대 업로드 가능한 바이트 크기, -1은 제한이 없음을 의미, 기본값은 -1
maxInMemorySize int 디스크에 임시 파일을 생성하기 전에 메모리에 보관할 수 있는 최대 바이트크기, 기본 값은 10240 바이트이다.
defaultEncoding String 요청을 파싱할 때 사용할 캐릭터 인코딩. 지정하지 않을 경우, HttpServletRequest.setCharacterEncoding() 메서드로 지정한 캐릭터 셋이 사용. 아무 값도 없을 경우ISO-8859-1을 사용
uploadTempDir Resource 임시디렉터리 지정

Controller에서 요청정보(업로드 파일 데이터) 전달 받기
1) @RequestParam 어노테이션을 이용한 업로드 파일 접근

@RequestMapping(value="/upload", method=RequestMethod.Post)
public String upload(@RequestParam("upfile") MultipartFile upfile){...}

요청 파라미터와 매개변수 이름이 같으면 @RequestParam 생략가능
@RequestMapping(value="/upload", method=RequestMethod.Post)
public String upload(MultipartFile upfile){...}

2) MultipartHttpServletRequest를 이용한 업로드 파일 접근
MultipartHttpServletRequest 인터페이스

  • Multipart 요청이 들어올 때 내부적으로 원본 HttpServletRequest 대신 사용되는 인터페이스.
  • MultipartHttpServletRequest 인터페이스는 HttpServletRequest 인터페이스와 MultipartRequest인터페이스를 상속받고 있다.
  • 즉, 웹 요청 정보를 구하기 위한 getParameter()와 같은 메서드와 Multipart관련 메서드를 모두 사용가능.

MultipartRequest 인터페이스의 파일 관련 주요 메서드

좋은 웹페이지 즐겨찾기