출처: https://bumcrush.tistory.com/182 [맑음때때로 여름]

 

 

MultipartResolover 설정

 

Multipart 지원 기능을 사용하려면 MultipartResolver를 스프링 설정 파일에 등록해야 한다.

Multipart 형식으로 데이터가 전송된 경우 해당 데이터를 스프링 MVC에서 사용 가능 하도록 변환해준다.

Commons FileUpload API 라이브러리를 이용해서 Multipart를 처리해 준다.

CommonsMultipartResolver를 MultipartResolver로 사용하기 위해서는 “multipartResolver” 이름의 빈으로 등록

 

 

파일업로드의 방법

1.@Requestparam 애노테이션을 이용한 업로드 파일 접근

2. MultipartHttpServletRequest 이용한 업로드 파일 접근

3. 커맨드 객체를 통한 업로드 파일 접근

MultipartRequest 인터페이스가 제공하는 메소드

 

입력받는 uploadForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<h1>파일업로드</h1>
<hr>
<h3>@RequestParam 이용한 파일 업로드</h3>
<form action="upload1" method="POST" enctype="multipart/form-data">
 
	 <!-- /fisrtspring/upload/uploadForm > /fisrtspring/upload/upload -->
	 
	 학번 : <input type="text" name="sn"><br>
	 리포트 파일 : 	<input type="file" name="report"><br>
	 <input type="submit">
	
</form>

<hr>
<h3>MultipartHttpServletRequest를 이용한 파일 업로드</h3>
<form action="upload2" method="POST" enctype="multipart/form-data">
	 
	 학번 : <input type="text" name="sn"><br>
	 리포트 파일 : 	<input type="file" name="report"><br>
	 <input type="submit">
	
</form>



<hr>
<h3>커맨드 객체를 통한 업로드 파일 접근</h3>
<form action="upload3" method="POST" enctype="multipart/form-data">
	 
	 학번 : <input type="text" name="sn"><br>
	 리포트 파일 : 	<input type="file" name="report"><br>
	 <input type="submit">
	
</form>

</body>
</html>

컨트롤러 FileuploadController.java

package com.aia.firstspring.controller;

import java.io.File;
import java.io.IOException;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import com.aia.firstspring.domain.ReportUploadRequest;

@Controller
public class FileuploadController {

	final String uri = "/uploadfile";

	@RequestMapping("/upload/uploadForm")
	public String uploadForm() {
		return "upload/uploadForm";
	}

	
	
	@RequestMapping("/upload/upload1")
	public String upload1(
			@RequestParam("sn") String sn,
			@RequestParam("report") MultipartFile report, 
			Model model,
			HttpServletRequest request) throws IllegalStateException, IOException {

		System.out.println(report.getOriginalFilename());

		model.addAttribute("sno", sn);
		model.addAttribute("reportFile", report.getOriginalFilename());
		
		// 파일의 저장
		report.transferTo(getFile(request, uri, report.getOriginalFilename()));

		return "upload/uploadComplete";
	}

	
	
	
	
	@RequestMapping("/upload/upload2")
	public String upload2(MultipartHttpServletRequest request, Model model) throws IllegalStateException, IOException {

		String sn = request.getParameter("sn");
		MultipartFile report = request.getFile("report");

		System.out.println(report.getOriginalFilename());

		model.addAttribute("sno", sn);
		model.addAttribute("reportFile", report.getOriginalFilename());
		
		// 파일 저장
		report.transferTo(getFile(request, uri, report.getOriginalFilename()));

		return "upload/uploadComplete";
	}
	
	
	

	@RequestMapping("/upload/upload3")
	public String upload3(
			ReportUploadRequest uploadrequest,
			Model model,
			HttpServletRequest request) throws IllegalStateException, IOException {

		System.out.println(uploadrequest.getReport().getOriginalFilename());

		model.addAttribute("sno", uploadrequest.getSn());
		model.addAttribute("reportFile", uploadrequest.getReport().getOriginalFilename());
		
		// getReport = 멀티파트파일
		uploadrequest.getReport().transferTo(getFile(request, uri,uploadrequest.getReport().getOriginalFilename())); 

		return "upload/uploadComplete";
	}


	
	
	
	/*
	  private String getRealpath(HttpServletRequest request, String uri) { return
	  request.getSession().getServletContext().getRealPath(uri); }
	 */

	
	// File 객체를 생성해서 반환
	private File getFile(HttpServletRequest request, String uri, String fileName) {
		String rpath = request.getSession().getServletContext().getRealPath(uri);
		File newFile = new File(rpath, fileName);
		return newFile;
	}
}

커맨드 객체를 이용하기 위한 ReportUploadRequest.java

package com.aia.firstspring.domain;

import org.springframework.web.multipart.MultipartFile;

public class ReportUploadRequest {
	
	private String sn;
	private MultipartFile report;
	
	public String getSn() {
		return sn;
	}
	public void setSn(String sn) {
		this.sn = sn;
	}
	public MultipartFile getReport() {
		return report;
	}
	public void setReport(MultipartFile report) {
		this.report = report;
	}

	
}

 

결과 view / uploadeComplete.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<h1> 학생 1 학번 : ${sno} , 리포트 파일 : ${reportFile}</h1>
<img alt="레포트이미지" src="../uploadfile/${reportFile}">

</body>
</html>

 

 

 

+ Recent posts