본문 바로가기

Spring

Spring(12) - 파일업로드

파일업로드를 할경우 가장 기본적으로 뷰에있는 폼에 enctype="multipart/form-data"를 추가해주어야한다.
그 후 스프링 설정으로 multipartResolver를 등록해주어야한다. 이때 빈의 이름은 꼭 multipartResolver 여야만한다.
DispatcherServlet은 multipartResovler라는 이름만을 사용하기 때문에 다른이름을 사용해서는 안된다.

 

<bean id = "multipartResolver" class = "org.springframework.web.multipart.common.CommonMultipartResolver"/>

 

이렇게 스프링에 설정을 하고 원하는 속성이 있으면 maxUploadSize, maxInMemorySize, defaultEncoding을 설정해 줄 수 있다. 설정이 끝난 후 컨트롤러에서 요청된 파일을 사용하려면 MultipartFile 인터페이스를 사용하면 된다. MultipartFile인터페이스가 제공하는 메서드를 사용해서 파일의 이름, 크기, 실제데이터 등을 알 수 있다. 

 

@RequestMapping(value = "file")
	public ModelAndView fileup(@RequestParam("f") MultipartFile multipartFile, MultipartHttpServletRequest request) {
		MultipartFile file = request.getFile("f");
		String originalFileName = multipartFile.getOriginalFilename();
		ModelAndView mav = new ModelAndView("file");
		mav.addObject("originalFileName", originalFileName);
		return mav;
	}

 

파일이름이 "f"로 넘어온경우 이런식으로 사용할 수가 있다. MultipartHttpServletRequest 인터페이스는 HttpServletRequest와 MultipartRequest를 상속받은 인터페이스로 웹요청정보와, 파일정보관련 메서드를 모두 사용할 수 있다. MultipartHttpServletRequest가 제공하는 메서드는 다음과 같다.

 

  • Iterator<String> getFileNames() - 업로드 된 파일들의 파라미터 이름 목록을 제공해준다.
  • MultipartFile getFile(String name) - 업로드 된 파일들 중 파라미터 이름이 name인 파일정보를 구한다.
  • List<MultipartFile> getFiles(String name) - 파라미터 이름이 name인 업로드 파일 정보 목록을 구한다.
  • Map<String, MultipartFile> getFileMap() - 파라미터 이름을 키로, 파라미터에 해당하는 파일정보를 값으로 하는 Map을 구한다.

 

이정도만 잘써도 다중업로드까지는 문제없게 사용할 수 있다.