YONG-MIN

MultipartResolver 설정을 통한 파일전송

개발언어/Java, Spring 2017. 5. 29. 18:19

Spring에서 파일전송을 위해 MultipartResolver를 설정하는 방법에 대해 포스팅하겠습니다.

테스트는 간단하게 아래의 구조를 만들어서 파일명을 출력하는 형태로 진행하겠습니다.

(Controller에서 File object를 넘겨받으면 후에는 해당 Object를 사용해서 다양한 방법으로 사용합니다.)

Maven Dependency 등록 (pom.xml)

가장 먼저 파일 전송에 필요한 의존관계를 설정하겠습니다.

pom.xml에 아래 소스코드를 작성하여 필요한 라이브러리를 사용하겠습니다.


    commons-fileupload
    commons-fileupload
    1.3.1


    commons-io
    commons-io
    2.4



TestController.java 생성하기 

저는 com.devks.test.controller 패키지를 만들고 TestController.java를 생성하였습니다.

devks는 제가 자주 사용하는 네이밍일뿐 다르게 하셔도 상관없습니다.

생성이 완료되면 TestController에는 다음 두가지 종류의 Mapping를 사용해야 합니다.

- 파일 전송폼인 fileForm.jsp 를 호출하기 위한 컨트롤러

- 파일을 전송요청을 처리하는 컨트롤러 

* SyntaxHighlighter가 <String, Object>에서 <S를 태그로 잘못 인식하는 문제가 있어 Generic 사이에 공백(' ')을 줬습니다.

@Controller
public class TestController{
	// 파일전송폼을 불러오기 위한 컨트롤러
	@RequestMapping("/fileForm")
	public String fileForm(){
		return "fileForm";		
	}
	
	// 파일전송 요청을 처리하기 위한 컨트롤러
	@RequestMapping("/getFile")
	public String getFile(HttpServletRequest request, Model model,  FileVo file){
		String fileName = file.getFile().getOriginalFilename(); // 원본 파일명
		long fileSize = file.getFile().getSize(); // 원본 파일 크기
		
		
		System.out.println("UPLOAD...FileName: "+fileName+", FileSize: "+fileSize);

		HashMap< String, Object > map = new HashMap< String, Object>();
		map.put("fileName", fileName);
		map.put("fileSize", fileSize);
		model.addAttribute("uploadFile", map);
		
		return "fileResponse";
	}
}

fileForm.jsp 생성하기

이제 파일을 전송할 양식을 만들겠습니다.

webapp/WEB-INF/view 디렉토리 밑에 fileForm.jsp를 만들었습니다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>




Insert title here


	


fileResponse.jsp 생성하기

이제 Controller에서 넘어오는 값을 표시하는 View 페이지를 만들도록 하겠습니다.

webapp/WEB-INF/view 디렉토리 밑에 fileResponse.jsp를 만들었습니다.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>





Insert title here


HashMap< String, Object> map = (HashMap< String, Object >)request.getAttribute("uploadFile");
	

Redirect 페이지

업로드된 파일명 : <%=map.get("fileName") %>
업로드된 크기 : ${uploadFile.fileSize}

ActionTag(<% %>)와 EL(${...})를 이용해서 취향에 맞는 방법으로 표현할 수 있습니다.


MultipartResolver 설정하기


한번 Tomcat을 가동하여 URL(http://localhost:8080/fileForm)을 작성하여 아무 파일이나 첨부해서 전송해보겠습니다.


위와 같이 Exception 이 발생합니다.

Spring에서 파일처리를 하기 위해서는 MultipartResolver 설정을 해주어야 하는데

이 부분을 진행하지 않아 오류가 발생했습니다.

이 설정을 위해서 webapp/WEB-INF/mvc-config.xml 에 다음 소스코드를 추가해줍니다.

	


최종 확인하기

정상적으로 Response 페이지에 파일정보가 출력됩니다.

컨트롤러에서 View페이지로 redirect하지 않고,

필요한 활용에 따라 응용하면 여러 기능을 구성할 수 있습니다.