Multipart 란?
- 웹 클라이언트가 요청을 보낼 때, HTTP 프로토콜의 바디 부분에 데이터를 여러 부분으로 나눠서 보내는 것
- 웹 클라이언트가 서버에게 파일을 업로드할 때, http 프로토콜의 바디 부분에 파일정보를 담아서 전송을 하는데,
파일을 한번에 여러개 전송을 하면 body 부분에 파일이 여러개의 부분으로 연결되어 전송됨
이렇게 여러 부분으로 나뉘어서 전송되는 것은 Multipart data라고 함 - 보통 파일을 전송할 때 사용함
Multipart/form-data란?
- 일반적으로 폼 데이터를 전송하면 application/x-www-form-urlencoded 의 형식으로 전송됨
=> HTTP body 에 바로 전송하고자 하는 데이터가 들어가는 형태임.
=> 예시로 name=lim&age=25 과 같은 key-value 쌍이 body에 들어감
이렇게 동일한 타입의 문자 데이터를 전송하는 것은 전혀 무리가 없음. - key-value 형태의 문자데이터와 바이너리 형태의 파일 데이터가 함께 전송되는 것은 다름.
=> application/x-www-form-urlencoded 타입으로는 전송이 어려움.
=> 여기서 multipart/form-data로 지정되고 정해진 형식에 따라 메시지를 인코딩해 전송.
=> 이를 처리하기 위해 서버는 멀티파트 메시지에 대해서 각 파트별로 분리하여 개별 파일의 정보를 얻게 됨.
* 이미지 파일도 문자로 이뤄져 있어 HTTP request body에 담아 서버로 전송.
MultipartResolver
- MultipartResolver의 경우 사용자의 파일업로드 요청에 대한 처리를 하는 인터페이스임.
- MultipartResolver의 경우에는 개발자가 별도의 Bean을 등록하지 않는다고해도 별도로 Spring에서
등록해 주지 않습니다. 하지만 Spring Boot를 사용한다면 기본 구현체가 등록이 됨. - springMVC에서는 파일 업로드 처리 시 DispatcherServlet에서 사용할 MultipartResolver의 Bean을 등록을 해주어야 함.
MultipartFile 이란?
Spring 프레임워크는 요청으로 함께 전달되는 파일들을 쉽게 다룰 수 있도록 MultipartFile 인터페이스를 제공한다.
- MultipartFile 인터페이스는 스프링에서 업로드 한 파일을 표현할 때 사용되는 인터페이스이다.
- MultipartFile 인터페이스를 이용해서 업로드한 파일의 이름, 실제 데이터, 파일 크기 등을 구할 수 있다.
MultipartFile을 사용하려면 org.springframework.web.multipart.MultipartFile을 import해야 한다.
MultipartFile 인터페이스의 주요 메서드
| 메서드 이름 | 타입 | 설명 |
| getName() | String | 파라미터 이름을 구함 |
| getContentType() | String | 업로드한 파일의 콘텐츠 형식을 반환 |
| getOriginalFilename() | String | 업로드한 파일의 이름을 반환 |
| isEmpty() | boolean | 업로드한 파일이 존재하는지 체크. |
| getSize() | long | 업로드한 파일의 크기를 반환 |
| getBytes() | byte[] | 업로드한 파일의 데이터를 반환, 바이트의 배열로 파일 내용을 반환함 |
| getInputStream() | InputStream | 업로드한 파일 데이터를 읽어오는 InputStream을 구함. |
| transferTo(File dest) | void | 업로드한 파일 데이터를 지정한 파일에 저장(전송) |
'Spring' 카테고리의 다른 글
| [Spring] UserDetails, UserDetailsService (2) | 2023.12.06 |
|---|---|
| [Spring] 싱글톤 방식의 주의점 (0) | 2023.06.14 |
| [Spring] 스프링이란? (0) | 2023.06.01 |
| [Spring] Spring Security (0) | 2023.05.25 |
| [Spring] 스프링이란? (0) | 2023.04.12 |