
1) 파일 업로드 설정
application.properties 파일 설정
spring.servlet.multipart.enabled=true
spring.servlet.multipart.file-size-threshold=2KB
spring.servlet.multipart.location=C:/upload
spring.servlet.multipart.max-file-size=200MB
spring.servlet.multipart.max-request-size=215MB
2) 파일 업로드 웹 페이지
<form action ="./form" method="post" enctype="multipart/form-data">
<p> 제목 : <input type="text" name="title">
<p> 파일 : <input type="file" name="fileName">
<p> <input type="submit" value="submit">
</form>
3) 정적 리소스 위치 설정
@Configuration
public class ResourceConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/images/**") // 외부 연결 uri 경로 설정
.addResourceLocations("file:///C:/upload/"); // 리소스가 위치한 실제 경로 설정. 하위의 리소스 반환
}
}

1) MultipartHttpServletRequest
<html>
<head>
<title>Chap07</title>
</head>
<body>
<h3>파일업로드</h3>
<form action ="./form" method="post" enctype="multipart/form-data">
<p>이름 : <input type="text" name="name"/>
<p>파일 : <input type="file" name="fileImage"/> // 파일 출력
<p><input type="submit" value="전송하기"/>
<input type="reset" value="다시쓰기"/>
</form>
</body>
<html>
<html>
<head>
<title>Chap07</title>
</head>
<body>
<h3 th:text="${data1}"></h3>
<p >실제 파일 이름: <span th:utext="${data2}"/>
<p> 서버 파일 이름 : <span th:utext="${data3}"/>
<p><img th:src="'/images/'+${data3}" width="100" />
</body>
<html>
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class ResourceConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/images/**") // /images/로 시작하는 요청이 들어왔을 때 처리
.addResourceLocations("file:///C:/upload/"); // 윈도우에서 실제 파일 경로
}
}
2) @RequestParam
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
@Controller
@RequestMapping("/exam02")
public class Example02Controller {
@GetMapping("/form")
public String requestForm() {
return "viewPage";
}
@PostMapping("/form")
public String submitForm(@RequestParam("name") String name,
@RequestParam("fileImage") MultipartFile file, Model model) {
// 업로드 파일을 MultipartFile 타입으로 받음
String filename = file.getOriginalFilename();
File saveFile = new File("c:\\upload\\" + name + "_" + filename);
try {
file.transferTo(saveFile); //파일 업로드
model.addAttribute("data1","@RequestParam 예졔" ); // 업로드 후 결과 전달
model.addAttribute("data2",filename);
model.addAttribute("data3", saveFile.getName() );
} catch (IOException e) {
e.printStackTrace();
}
return "viewPage_process";
}
}
3) @ModelAttribute
import org.springframework.web.multipart.MultipartFile;
import lombok.Data;
@Data
public class Member {
private String name;
private MultipartFile fileImage; // 요청 매개변수와 동일한 이름으로 선언
}
import org.springframework.web.multipart.MultipartFile;
import com.springboot.domain.Member;
@Controller
@RequestMapping("/exam03")
public class Example03Controller {
@GetMapping("/form")
public String requestForm(Member member) {
return "viewPage";
}
@PostMapping("/form")
public String submitForm(@ModelAttribute Member member, Model model){
String name = member.getName(); // 파일 이름
MultipartFile file = member.getFileImage(); // 파일 이미지
String filename = file.getOriginalFilename();
File saveFile = new File("c:\\upload\\" + name + "_" + filename);
try {
file.transferTo(saveFile); // 파일 업로드
model.addAttribute("data1","@ModelAttribute 예졔" );
model.addAttribute("data2",filename);
model.addAttribute("data3", saveFile.getName() );
}catch (IOException e) {
e.printStackTrace();
}
return "viewPage_process";
}
}
1. 파일을 업로드할 때, 웹 페이지에서는 ( ) 태크를 이용한다.
2. 파일 업로드를 할 때 사용하는 인터페이스는 ( ) 이다.
3. 정적 리소스는 ( ) 클래스로 쉽게 처리 가능하다.
4. 폼 태그의 method 속성은 ( ) 를 반드시 사용한다.
5. MutipartFile 인터페이스와 함께 ( ), ( ) 에너테이션을 사용하여 업로드한 파일을 전달받을 수 있다.
답:
1. 폼(form)
2. MultipartFile
3. ResourceHttpRequestHandler
4. POST
5. @RequestParam, @ModelAttribute
1. 빈칸에 들어갈 코드는?
답: @RequestParam, MultipartFile
@Controller
@RequestMapping("/exam02")
public class Example02Controller {
@GetMapping("/form")
public String requestForm() {
return "viewPage";
}
@PostMapping("/form")
public String submitForm(@RequestParam("name") String name, //
____________("fileImage") _____________ file, Model model) {
String filename = file.getOriginalFilename();
File saveFile = new File("c:\\upload\\" + name + "_" + filename);
try {
file.transferTo(saveFile); //파일 업로드
model.addAttribute("data1","@RequestParam 예졔" );
model.addAttribute("data2",filename);
model.addAttribute("data3", saveFile.getName() );
} catch (IOException e) {
e.printStackTrace();
}
return "viewPage_process";
}
}
2. 빈칸에 들어갈 코드는?
답: MultipartFile
@Controller
@RequestMapping("/exam03")
public class Example03Controller {
@GetMapping("/form")
public String requestForm(Member member) {
return "viewPage";
}
@PostMapping("/form")
public String submitForm(@ModelAttribute Member member, Model model){
String name = member.getName(); // 파일 이름
____________ file = member.getFileImage(); // 파일 이미지
String filename = file.getOriginalFilename();
File saveFile = new File("c:\\upload\\" + name + "_" + filename);
try {
file.transferTo(saveFile); // 파일 업로드
model.addAttribute("data1","@ModelAttribute 예졔" );
model.addAttribute("data2",filename);
model.addAttribute("data3", saveFile.getName() );
}catch (IOException e) {
e.printStackTrace();
}
return "viewPage_process";
}
}
출처: 송미영,『 스프링 부트 완전 정복 』, 길벗(2024), p203-235.
Coner Spring1
Editor: soyee
| [Spring 1팀] 9장. 유효성 처리 (0) | 2025.11.28 |
|---|---|
| [Spring 1팀] 8장. 다국어 처리 (0) | 2025.11.21 |
| [Spring 1팀] 6장. 폼 태그 (1) | 2025.11.07 |
| [Spring 1팀] 5장. 요청 처리 메서드의 파라미터 유형 (0) | 2025.10.31 |
| [Spring 1팀] 4장. 컨트롤러 구현 (0) | 2025.10.10 |