[Spring] 파일 업로드 설정하기 (xml방식, Java방식)
파일을 서버에 전송하는 방식은 크게 <form> 태그를 이용해 업로드하는 방식, Ajax를 이용하는 방식으로 나눌 수 있습니다.
■ <form> 태그는 브라우저의 제한이 없는 경우에 사용합니다.
- 일반적인 페이지 이동과 동시에 첨부파일을 업로드하는 방식
- <iframe>을 이용해서 화면의 이동 없이 첨부파일을 처리하는 방식
■ Ajax는 첨부파일을 별도로 처리하는 경우 사용합니다.
- <input type="file">을 이용하고 Ajax로 처리하는 방식
- <HTML5>의 Drag And Drop 기능이나 jQuery 라이브러리를 이용해서 처리하는 방식
서버에서 주의해야 하는 점은 어떤 종류의 라이브러리나 API 등을 활용할 것인지에 대한 부분입니다.
서버에서 첨부파일을 처리하기 위해 다음과 같은 API들을 활용합니다.
# cos.jar : 2002년 이후 개발이 종료되어 권장하진 않음
# commons-fileupload : 가장 일반적으로 많이 활용되고, 서블릿 스펙 3.0 이전에도 사용 가능.
# 서블릿 3.0 이상 - 3.0 이상부턴 자체적인 파일 업로드 처리기 API 상에서 지원
이 글에서는 서블릿 3.0 이상에서 사용하고 있는 버전으로 구성할 예정입니다.
첨부파일은 실제 서버 폴더에 저장하기 위해 C드라이브 밑에 파일을 구성합니다.
스프링 첨부파일을 위한 설정
pom.xml 수정하기
스프링 버전 수정
서블릿 3.0 이상을 활용하기 위해 서블릿 버전 수정 (2.5 -> 3.1)
lombok 추가
web.xml을 이용하는 경우의 첨부파일 설정
web.xml 파일의 최상단을 보면 다음과 같이 작성되어 있습니다. 이를 수정합니다.
web.xml의 <servlet> 태그 내에는 <multipart-config> 태그를 추가합니다.
<multipart-config>의 설정은
특정 사이즈의 메모리 사용<file-size-threshold>
업로드되는 파일을 저장할 공간<location>
업로드되는 파일의 최대 크기<max-file-size>
한번에 올릴 수 있는 최대 크기<max-request-size>를 지정할 수 있습니다.
web.xml의 설정은 WAS(Tomcat) 자체의 설정일 뿐이고, 스프링에서 업로드 처리는 MultipartResolver라는 타입 객체를 빈으로 등록해야만 가능합니다. Web과 관련된 설정이므로 servlet-context.xml을 이용해서 설정합니다.
servlet-context.xml의 일부
첨부파일을 처리하는 빈을 설정할 때 id는 'multipartResolver'라는 이름으로 지정된 이름을 사용합니다.
Java 설정을 이용하는 경우
이전 참고 글
2021.05.05 - [Spring] - 스프링 웹 프로젝트를 Java Configuration 으로 설정하기
2021.05.14 - [Spring] - [Spring] 커넥션 풀(Connection Pool) HikariCP, Java로 설정하기
2021.06.18 - [Spring] - [Spring framework] 스프링 MVC 프로젝트 Java로 구성하기
2021.05.29 - [Spring] - [Spring Framework] 스프링 파일 업로드 Java config
Java 설정을 이용하는 경우는 먼저 pom.xml에서 web.xml이 없어도 문제가 없도록 <plugin>을 추가합니다.
com.project.config 패키지 아래 Java 설정 클래스들을 추가합니다.
WebConfig 수정
web.xml을 대신하는 WebConfig 클래스 파일에 파일 업로드를 위한 MultipartConfig 설정을 추가합니다.
xml에서 <multipart-config> 태그는 WebConfig 클래스에서 javax.servlet.MultipartConfigElement라는 클래스를 이용합니다.
ServletConfig 수정
servlet-context.xml을 대신하는 ServletConfig 클래스 파일은 MutipartResolver를 스프링 빈으로 추가합니다.
다음 글에 파일 업로드 설정을 한 뒤 파일을 업로드 하는 과정을 담겠습니다.
'코드로 배우는 웹 스프링 프로젝트'로 공부中
'java, spring' 카테고리의 다른 글
[Spring] Ajax를 이용하는 파일 업로드 (0) | 2021.08.23 |
---|---|
[Spring] <form> 방식의 파일 업로드 (0) | 2021.08.23 |
[Spring] 댓글과 댓글 수에 대한 처리 (0) | 2021.08.22 |
[Spring] Java 설정을 이용한 트랜잭션 설정 (0) | 2021.08.22 |
[Spring] 스프링에서 트랜잭션 관리 (0) | 2021.08.22 |