Notice
Recent Posts
Recent Comments
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
Tags
- 토큰털이
- 2017티스토리결산
- 윈도우11
- 티스토리
- wannacry
- zelf
- 다음아고라서명운동
- 페이스북
- ChatGPT
- 페이스북서명운동
- 방문자추적기
- 랜섬웨어
- 토스뱅크
- 애플페이
- 다음아고라사칭
- 0원메가패스
- 컨택리스
- perplexity
- Applepay
- 자바
- 이클립스
- 베이직쎈
- 토큰탈취
- 젤프
- 내방문자찾아주오
- 메플리
- 예제
- Ai
- 2017 티스토리 결산
- 취약점
Archives
- Today
- Total
EdgeSecu
Spring MVC 파일 업로드 정리: @RequestParam vs @ModelAttribute 활용법 본문

@RequestParam 으로 개별 MultipartFile 을 바로 받는 것 외에도, 폼 데이터를 묶어서 전달할 때 사용하는 커맨드 객체(command object) 에도 MultipartFile 필드를 선언해 놓고, 그 객체를 @ModelAttribute 로 받아올 수 있다는 뜻이야.
즉, 이렇게 두 가지 방법이 있다는 거지:
1. 개별 파라미터로 받기 (@RequestParam)
@PostMapping("/upload")
public String uploadFile(@RequestParam("file") MultipartFile file) {
// file.getOriginalFilename(), file.transferTo(...) 등 사용
return "uploadResult";
}
- HTML form 에 <input type="file" name="file" /> 으로 파일 입력을 만들면
@RequestParam("file") 과 매핑되어 업로드된 파일을 받을 수 있어.
2. 커맨드 객체로 받기 (@ModelAttribute)
// 1) 업로드 폼 데이터와 파일을 담을 DTO 정의
public class ItemForm {
private String itemName;
private int price;
private MultipartFile attachFile; // 파일 한 개
private List<MultipartFile> imageFiles; // 파일 여러 개
// (getter, setter 생략)
}
// 2) 컨트롤러에서 @ModelAttribute 로 한 번에 받기
@PostMapping("/items/new")
public String saveItem(@ModelAttribute ItemForm form) throws IOException {
// form.getAttachFile(), form.getImageFiles() 사용 가능
MultipartFile file = form.getAttachFile();
String filename = file.getOriginalFilename();
file.transferTo(new File("/uploads/" + filename));
// 나머지 form.getItemName(), form.getPrice() 등도 함께 사용
return "redirect:/items";
}
- HTML form 은 반드시
- name="attachFile" 이 DTO의 attachFile 필드로,
name="imageFiles" 이 imageFiles 리스트로 바인딩돼.
<form method="post" enctype="multipart/form-data">
<input type="text" name="itemName" />
<input type="number" name="price" />
<input type="file" name="attachFile" />
<input type="file" name="imageFiles" multiple />
<button type="submit">저장</button>
</form>
요약하자면
- @RequestParam MultipartFile file 은 “파일만 하나 받아올 때” 편리하고,
- @ModelAttribute MyForm form 은 “폼의 여러 필드(텍스트, 숫자, 파일 등)를 한꺼번에 객체로 묶어서” 받고 싶을 때 유용해.
- 이 둘 모두 내부적으로는 스프링의 MultipartResolver 가 MultipartFile 타입으로 업로드된 파일을 생성해 주는 건 똑같아.
'공부 > Spring' 카테고리의 다른 글
| DispatcherServlet, Servlet, Controller 차이 (1) | 2025.07.20 |
|---|---|
| Spring MVC에서 model.addAttribute로 뷰에 데이터 전달하기 (0) | 2025.06.04 |