MultipartHttpServletRequest 인터페이스 사용
위 방법은 스프링이 제공하는 HttpServletRequest와 MultipartRequest 인터페이스를 상속받아
파일을 업로드하는 방법입니다.
웹 요청 정보를 얻기 위해서 HttpServletRequest가 제공하는 getParameter() 메소드를,
MultipartFile 데이터를 받기 위해 MultipartRequest가 제공하는 메소드를 사용합니다.
다음은 MultipartRequest 인터페이스의 주요 메소드입니다.
메소드 이름 | 타입 | 설명 |
getFile(String name) | MultipartFile | 이 요청에 업로드된 파일의 설명과 내용 반환 없을 때는 null 반환 |
getFileMap() | Map<String, MultipartFile> | 이 요청에 포함된 멀티파트 파일의 Map 반환 |
getFileNames() | Iterator<String> | 이 요청에 포함된 멀티파트의 매개변수 이름이 포함된 String 객체의 Iterator 반환 |
getFiles(String name) | List<MultipartFile> | 이 요청에 업로드된 파일의 내용과 설명 반환 없으면 빈 List 반환 |
getMultiFileMap() | MultiValueMap<String, MultipartFile> | 이 요청에 포함된 멀티파트의 MultiValueMap 반환 |
getMultipartContentType (String aramOrFileName) |
String | 지정된 요청 부분의 content 타입 결정 |
다음은 MultipartHttpServletRequest를 이용해서 파일을 업로드하는 예시입니다.
Example02Controller.java 입니다.
package com.springmvc.controller;
import java.io.File;
import java.io.IOException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
@Controller
@RequestMapping("/exam02")
public class Example02Controller {
@GetMapping("/form")
public String requestForm() {
return "webpage09_01";
}
@PostMapping("/form")
public String submitForm(MultipartHttpServletRequest request) {
String name = request.getParameter("name");
MultipartFile file = request.getFile("fileImage");
String filename = file.getOriginalFilename();
File f = new File("c:\\upload\\"+name+"_"+filename);
try {
file.transferTo(f);
} catch (IOException e) {
e.printStackTrace();
}
return "webpage09_submit";
}
}
위 코드를 실행하게 되면 다음과 같습니다.
다음과 같이 입력하고 [전송하기] 버튼을 누르겠습니다.
업로드에 성공한 것을 확인하였습니다.
@ModelAttribute 이용
위 방법은 멀티파트 요청 매개변수와 동일한 이름으로
커맨드 객체에 MultipartFile 타입의 프로퍼티를 추가하는 방법입니다.
만약 폼 페이지에서 업로드 파일의 매개변수 이름이 imageFile이라면
커맨드 객체에 동일한 이름으로 MultipartFile 타입의 imageFile 프로퍼티를 추가해주어야 합니다.
다음은 커맨드 객체를 사용해서 파일을 업로드 하는 예시입니다.
우선 커맨드 객체를 생성해주어야 합니다.
Member.java 파일입니다.
package com.springmvc.domain;
import org.springframework.web.multipart.MultipartFile;
public class Member {
private String name;
private MultipartFile imageFile;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public MultipartFile getImageFile() {
return imageFile;
}
public void setImageFile(MultipartFile imageFile) {
this.imageFile = imageFile;
}
}
MultipartFile 타입으로 imageFile 프로퍼티를 추가해줍니다.
다음은 Example03Controller.java 입니다.
package com.springmvc.controller;
import java.io.File;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import com.springmvc.domain.Member;
@Controller
@RequestMapping("/exam03")
public class Example03Controller {
@GetMapping("/form")
public String requestForm(Member member) {
return "webpage09_02";
}
@PostMapping("/form")
public String submitForm(@ModelAttribute("member") Member member,
HttpServletRequest request, HttpSession session) {
String name = member.getName();
String filename = member.getImageFile().getOriginalFilename();
try {
member.getImageFile().transferTo(new File("c:\\upload\\"+name+"_"+filename));
} catch (IOException e) {
e.printStackTrace();
}
return "webpage09_submit";
}
}
webpage09_02.jsp 파일입니다.
<%@ page contentType="text/html; charset=utf-8" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<html>
<head>
<title>File Upload</title>
</head>
<body>
<h3>파일업로드</h3>
<form:form action="form" modelAttribute="member" method="post" enctype="multipart/form-data">
<p>이름 : <form:input path="name"/>
<p>파일 : <form:input path="imageFile" type="file"/>
<p><input type="submit" value="전송하기"/>
<input type="reset" value="다시쓰기" />
</form:form>
</body>
</html>
위 코드를 실행하게 되면 다음과 같습니다.
다음과 같이 입력하고 [전송하기] 버튼을 누르겠습니다.
파일업로드에 성공하였습니다.
upload 폴더에 들어가보면 지금까지 했던 예제들이 잘 저장된 것을 확인할 수 있습니다.
'SPRING' 카테고리의 다른 글
[SPRING]#31 도서 쇼핑몰 구현 (파일 업로드5) (0) | 2024.01.12 |
---|---|
[SPRING]#30 도서 쇼핑몰 구현 (파일 업로드4) (0) | 2024.01.11 |
[SPRING]#28 도서 쇼핑몰 구현 (파일 업로드2) (0) | 2024.01.11 |
[SPRING]#27 도서 쇼핑몰 구현 (파일 업로드1) (0) | 2024.01.11 |
[SPRING]#26 도서 쇼핑몰 구현 (스프링 시큐리티8) (0) | 2024.01.11 |