파일 업로드

호떡·2022년 10월 19일
0

파일 입출력을 위한 의존성 추가(라이브러리 세팅)


pom.xml에 Apache Commons FileUpload 의존성 추가

		<!-- 파일 업로드를 위한 의존성 추가-->
		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.4</version>
		</dependency>


파일 업로드

1. multipartResolver라는 이름으로 bean으로 등록

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의 종류는 아니다

2. 컨트롤러에 upload 메서드 구현

해당 프로젝트는 톰캣 서버에 파일을 업로드하고 있다. 따라서 결과페이지에 업로드한 파일을 보여주기 위해서는 톰캣 서버에 저장된 파일을 불러올 필요가 있다.(결과1)
파일 파라메터 키값에 대응되도록 MultipartFile을 수신한다.

3. UI

1) input type="file" 로 파일을 업로드할 수 있도록 UI 제공
2) 속성으로 enctype="multipart/form-data" 필수


결과1 | 톰캣 서버에 저장된 파일 불러오기

파일이 저장된 (서버 내의) 자원공간을 열어서 파일을 클라이언트에 주는 것

📌 결과 페이지(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'이라고 하는 폴더에서 파일을 찾겠다.


결과2 | 파일 다운로드

파일 다운로드라는 요청을 만들어서 컨트롤러가 처리
📌 결과 페이지(result.jsp)는 아래와 같다.


<body>
	<a href="download?fileName=${fileName }">${fileName }</a> 
</body>

1. 파일 다운로드 위해 구현한 View 활용

FileDownLoadView.java

2. FileDownLoadView를 bean으로 등록

원래는 컨트롤러와 뷰의 패키지를 구분하여 bean 등록을 해야하지만 해당 프로젝트는 아래와 같이 컨트롤러와 뷰를 하나의 패키지로 bean 등록하였다.


<context:component-scan base-package="com.sd08.mvc" />

1) servlet-context.xml에 bean 등록하기

3. BeanNameViewResolver 등록

<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을 찾아가도록 한다.

4. 컨트롤러에 download 메서드 구현

0개의 댓글