흐음... 파일 업로드가 필요한경우 html 폼의 enctype 속성을 "multipart/form-date" 로 설정해야한다.

스프링은 Multipart지원 기능을 제공하고 있기 때문에 쉽게 처리 가능하다고 하네?

우선 언제나 그렇듯이.. 뭔가를 등록해야한다. .. 쓸려면 말야~
뭐겠니?? 빈이지.

MultipartResolver 를 등록해줘야 한다. 해당 빈은 Multipart 형식으로 데이터가 전송된 경우, 해당 데이터를 스프링 MVC 에서 사용할 수 있도록 변환해준다.
예로, @PathVariable 어노테이션을 이용해서 Multipart로 전송된 파라미터와 파일을 사용할 수 있도록 해준다.

스프링이 제공하는 기본 MultupartResolver는 CommonsMultipartResolver 이다.
해당 리졸버는 Commons FileUpload API를 이용해서 Multipart를 처리해준다. 

<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
</bean>

CommonsMultipartResolver 가 제공하는 프로퍼티는..... 찾아보면 나옴; (뭐.. 최대업로드 사이즈, 최대 메모리 사이즈, 인코딩 타입등을 설정할 수 있다)

1. 업로드한 파일을 전달받는 방법

1.1 @RequestParam 어노테이션을 이용한 업로드된 파일 접근

<h3>@RequestParam 사용</h3>
<form action="submitReport1.do" method="post" enctype="multipart/form-data">
학번: <input type="text" name="studentNumber" />
<br/>
리포트파일: <input type="file" name="report" />
<br/>
<input type="submit" />
</form>

파라미터 이름은 report 이고 @RequestParam어노테이션과 MultipartFile 타입의 파라미터를 이용해서 파일 데이터를 전달받는다.


@RequestMapping(value = "/report/submitReport1.do", method = RequestMethod.POST)
public String submitReport1(@RequestParam("studentNumber") String studentNumber, @RequestParam("report") MultipartFile report) {
printInfo(studentNumber, report);
return "report/submissionComplete";
}
MultipartFile을 통해서 파일 이름, 데이터, 크기등을 알 수 있다.

1.2 MultipartHttpServletRequest를 이용한 업로드된 파일 접근


@RequestMapping(value = "/report/submitReport2.do", method = RequestMethod.POST)
public String submitReport2(MultipartHttpServletRequest request) {
String studentNumber = request.getParameter("studentNumber");
MultipartFile report = request.getFile("report");
printInfo(studentNumber, report);
return "report/submissionComplete";
}
MultipartHttpServletRequest 인터페이스는 스프링이 제공하는 인터페이스로서 Multipart 요청이 들어올 때 내부적으로 원본 HttpServletRequest 대신 사용된다.

MultipartHttpServletRequest 는 어떠한 메소드도 선언하고 있지 않고 단지, MultipartRequest 와 HttpServletRequest 를 상속받고 있다.


1.3 커맨드 객체를 이용한 업로드된 파일접근
흐음.. 우리가 파라미터로 받는 커맨드 객체를 통해서도 .. 되겠지

해당 커맨드 클래스에 파라미터와 동일한 이름의 MultipartFile 타입 프로퍼티를 추가해주기만 하면된다.

public class ReportCommand {
....
public void setReport(MultipartFile report) {
this.report = report;
}
 }

public MultipartFile getReport() {
return report;
}
 
업로드 파일의 파라미터 이름이 report 인 경우 위와 같이 report 관련 프로퍼티를 커맨드 클래스에 추가한다.

위처럼 MultuFile 타입의 프로퍼티를 커맨드 클래스(ReportCommand)에 추가했다면 @RequestMapping 메서도의 커맨드 객체로 이용할 수 있다.
        @RequestMapping(value = "/report/submitReport3.do", method = RequestMethod.POST)
public String submitReport3(ReportCommand reportCommand) {
printInfo(reportCommand.getStudentNumber(), reportCommand.getReport());
return "report/submissionComplete";
}











 



 












 

'IT > 스프링' 카테고리의 다른 글

캐시옵션 설정  (0) 2012.01.19
HandlerInterceptor  (0) 2012.01.19
Validator / Error interface .... in Spring  (0) 2012.01.16
Ant 경로 패턴 in @RequestMapping  (0) 2012.01.16
PathVariable 어노테이션을 이용한 URI 템플릿...  (0) 2012.01.16

+ Recent posts