[Spring MVC] 파일업로드 처리

반응형

 

이 글은 코드로 배우는 스프링 웹 프로젝트(남가람북스, 구멍가게 코딩단)을 읽고 공부한 내용을 바탕으로 정리한 글입니다.


 

1. commons-fileupload 라이브러리 추가


  
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>

 

2. dispatcher-servlet.xml 설정


  
<beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<beans:property name="defaultEncoding" value="utf8" />
<beans:property name="maxUploadSize" value="104857560" />
<beans:property name="uplaodTempDir" value="file:~/upload/tmp" />
<beans:property name="maxInMemorySize" value="10485756" />
</beans:bean>

dispatcher-servlet.xml은 스프링 MVC의 특정한 객체(Bean)을 설정해서 파일을 처리합니다. 파일 업로드를 할 때는 idmultipartResolver인 객체를 설정합니다.

 

3. views/sample/exUpload.jsp 작성


  
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>sample/exUpload</title>
</head>
<body>
<form action="exUploadPost" method="post" enctype="multipart/form-data">
<div>
<input type="file" name="files">
</div>
<div>
<input type="file" name="files">
</div>
<div>
<input type="file" name="files">
</div>
<div>
<input type="submit">
</div>
</form>
</body>
</html>

 

4. 컨트롤러 작성


  
@GetMapping("/exUpload")
public void exUpload() {
log.info("----- exUpload -----");
}
@PostMapping("/exUploadPost")
public void exUploadPost(ArrayList<MultipartFile> files) {
files.forEach(file -> {
log.info("------------------------------");
log.info("name: " + file.getOriginalFilename());
log.info("size: " + file.getSize());
});
}

스프링 MVC는 전달되는 파라미터가 동일한 이름으로 여러 개 존재하면 배열로 처리할 수 있으므로 파라미터를 MultipartFiler 배열 타입으로 작성합니다.

 

위와 같이 파일을 지정해서 업로드하면 정상적으로 log가 찍히는 것을 볼 수 있습니다. (최종 업로드는 처리하지 않았습니다.)

반응형

'Java > Spring' 카테고리의 다른 글

[Spring boot] Maria DB 설정  (0) 2023.01.06
[Spring MVC] 컨트롤러의 Exception 처리  (0) 2023.01.03
[Spring MVC] Controller  (0) 2023.01.03
[Spring MVC] 기본 구조  (0) 2023.01.02
[Spring] MyBatis와 스프링 연동 (+log4jdbc)  (0) 2023.01.02

댓글