๐ ํ์ผ ์ ๋ก๋ (File Upload)
๐ ๊ฐ์
- HTTP
multipart/form-data
์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด Spring MVC์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ MultipartResolver
์ธํฐํ์ด์ค ๊ตฌํ์ฒด๋ฅผ ํตํด ์ ๋ก๋๋ ํ์ผ์ ํ์ฑํ๊ณ ๋ฐ์ธ๋ฉ- ํ์ผ ์
๋ก๋๋ ์ปจํธ๋กค๋ฌ ๋ฉ์๋์์
MultipartFile
๋ก ์ง์ ๋ฐ์ ์ ์์
โ๐ป ํ์ค ์์ฝ
MultipartResolver
๋ฅผ ํตํด multipart ์์ฒญ์ ํ์ฑํ๊ณ , ์ปจํธ๋กค๋ฌ์์ ์์ฝ๊ฒ ํ์ผ์ ์ฒ๋ฆฌ
๐ค ์ ํ์ํ๊ฐ?
- HTML
<form>
ํ์ผ ์ ์ก์ ์ฒ๋ฆฌํ๋ ํ์ค ๋ฐฉ์ ์ง์ - ๋์ฉ๋ ํ์ผ ์ฒ๋ฆฌ, ์์ ์ ์ฅ์ ๊ด๋ฆฌ, ๋ฉ๋ชจ๋ฆฌยท๋์คํฌ ์ ์ฅ ๋ฐฉ์ ๋ถ๋ฆฌ ๊ฐ๋ฅ
- ํ์ผ ์ ๋ก๋ ๋ก์ง๊ณผ ๋น์ฆ๋์ค ๋ก์ง์ ๋ถ๋ฆฌํด ์ ์ง๋ณด์์ฑ ํฅ์
โ๏ธ ์ฃผ์ ๊ตฌ์ฑ ์์
1. MultipartResolver ์ธํฐํ์ด์ค
- multipart ์์ฒญ์ ์ผ๋ฐ ์์ฒญ์ฒ๋ผ ๋ณํํด์ฃผ๋ ์คํ๋ง MVC ์ปดํฌ๋ํธ
๊ตฌํ์ฒด | ํน์ง |
---|---|
StandardServletMultipartResolver | Servlet 3.0+ ์ง์, ์์กด์ฑ ์ถ๊ฐ ๋ถํ์ |
CommonsMultipartResolver | Apache Commons FileUpload ๊ธฐ๋ฐ, ์์กด์ฑ ์ถ๊ฐ ํ์ |
๐ง ์ค์ ๋ฐฉ๋ฒ
(A) Bean ๋ฑ๋ก
@Bean
public MultipartResolver multipartResolver() {
return new StandardServletMultipartResolver();
//CommonsMultipartResolver ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ณ๋์ ์์กด์ฑ์ ์ถ๊ฐํด ์ค์ผํจ
}
(B) Spring Boot ์ฌ์ฉ ์
application.properties
์์ ํ์ฑํ
spring.servlet.multipart.enabled=true
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=20MB
- ๋ณ๋ Bean ๋ฑ๋ก ์์ด ์๋ ์ค์ ๋จ
๐ ์ปจํธ๋กค๋ฌ ์์
@PostMapping("/upload")
public String uploadFile(@RequestParam("file") MultipartFile file) {
if (!file.isEmpty()) {
String filename = file.getOriginalFilename();
Path path = Paths.get("/uploads/" + filename);
file.transferTo(path.toFile());
}
return "redirect:/success";
}
์ฃผ์ ๊ตฌํ์ฒด
StandardServletMultipartResolver
: Servlet 3.0 ์ด์์ ๊ธฐ๋ณธ ๊ตฌํCommonsMultipartResolver
: Apache Commons FileUpload ๊ธฐ๋ฐ ๊ตฌํ (์ถ๊ฐ ์์กด์ฑ ํ์)
โ Spring Boot์์๋
spring.servlet.multipart.enabled=true
์ค์ ์ ์๋์ผ๋ก ๋ฑ๋ก๋จ
โ ๏ธ ์ฃผ์ํ ์
- ์
๋ก๋ ์ ํ ํฌ๊ธฐ(
max-file-size
)๋ฅผ ๋ฐ๋์ ์ค์ ํ ๊ฒ - ๋ณด์์ ํ์ฉ ํ์ฅ์, ์ ์ฅ ๊ฒฝ๋ก ๊ฒ์ฆ ํ์
- ๋๊ท๋ชจ ํ์ผ์ ์คํธ๋ฆฌ๋ฐ ์ฒ๋ฆฌ ๊ณ ๋ ค
- ์ ๋ก๋ ๋๋ ํ ๋ฆฌ ์ ๊ทผ ๊ถํ ์ค์ ํ์