pom.xml에 Apache Commons FileUpload 의존성 추가
<!-- 파일 업로드를 위한 의존성 추가-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
Commons FileUpload 라이브러리 안에 있는 객체를 반드시 multipartResolver라는 이름으로 bean 등록
<!-- multipartResolver를 bean으로 등록한다. -->
<beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<beans:property name="maxUploadSize" value="10485760" />
<beans:property name="defaultEncoding" value="UTF-8" />
</beans:bean>
1) servlet-context.xml에 bean 등록
2) setterInjection 방식으로 Bean 등록(위의 예제)
3) name="maxUploadSize" : 파일 용량 제한(10MB로 제한). 기초자료형이므로 value로 값을 설정
4) name="defaultEncoding" : 기본 인코딩 방식
*view Resolver의 종류는 아니다
해당 프로젝트는 톰캣 서버에 파일을 업로드하고 있다. 따라서 결과페이지에 업로드한 파일을 보여주기 위해서는 톰캣 서버에 저장된 파일을 불러올 필요가 있다.(결과1)
파일 파라메터 키값에 대응되도록 MultipartFile을 수신한다.
1) input type="file" 로 파일을 업로드할 수 있도록 UI 제공
2) 속성으로 enctype="multipart/form-data" 필수
파일이 저장된 (서버 내의) 자원공간을 열어서 파일을 클라이언트에 주는 것
📌 결과 페이지(result.jsp)는 아래와 같다.
<body>
<!-- resources 매핑을 이용하는 경우 -->
<a href="/mvc/file/${fileName }">${fileName }</a>
</body>
📌 resources 매핑을 이용하는 경우
<resources mapping="/file/**" location="/file/" />
1) servlet-context.xml에서 매핑시켜주기
2) mapping: '/file/'이라고 시작하는 모든 경로에 대해서
3) location: 'file'이라고 하는 폴더에서 파일을 찾겠다.
파일 다운로드라는 요청을 만들어서 컨트롤러가 처리
📌 결과 페이지(result.jsp)는 아래와 같다.
<body>
<a href="download?fileName=${fileName }">${fileName }</a>
</body>
FileDownLoadView.java
원래는 컨트롤러와 뷰의 패키지를 구분하여 bean 등록을 해야하지만 해당 프로젝트는 아래와 같이 컨트롤러와 뷰를 하나의 패키지로 bean 등록하였다.
<context:component-scan base-package="com.sd08.mvc" />
1) servlet-context.xml에 bean 등록하기
<beans:bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
<beans:property name="order" value="0"></beans:property>
</beans:bean>
BeanNameViewResolver는 MainController에 download( )에서 반환된 view name의 앞글자를 대문자로 바꾸고 그와 동일한 이름을 가진 Bean을 찾아가도록 한다.