- References
- Multipart 란
- 여러종류의 데이터를 여러부분으로 나누어 보낼 때 사용하는 Content-type
- Form 전송은 여러 종류의 데이터를 한번에 보낼 수 있음
- 파일 업로드 상황에서 한 요청의 Body에 두 종류 이상의 데이터를 구분해서 넣어주는 방법이 필요하여 생긴 Content-type
- 예를 들어 이미지(image/jpeg) + 이미지 설명(application/x-www-form-urlencoded)
- multipart/form-data 메시지 구성 방법
- Request Header 에 Content-type : multipart/form-data ; {Boundary} 로 구성
- Boundary 문자열은 메시지 페이로드를 각 파트로 구분하는 구분자
- {개행} Boundary 문자열 {개행} 으로 구분 되며 개행에는 반드시 " \r\n" 을 사용해야 함
- 각 데이터 구분 값은 -- 로 시작해야 하며 설정한 boundary 앞에 -- 를 붙여 구분, 모든 파트가 끝나면 구분자 뒤에 -- 를 추가하여 마무리
- 각 파트에는 헤더가 들어가며 Content-Disposition:form-data; name=" ..." 와 같은 폼 필드의 정보를 추가
※ POSTMAN 으로 호출한 Request Body Example (w. Wireshark)
Request body 의 form-data 기능을 사용하여 호출하면 편리하지만
커스텀 boundary 설정 및 raw 데이터 호출을 통해 multipart/form-data 요청 상세 확인

Request Header 세팅
Content-type : multipart/form-data; boundary=--------------------------297662709069591385314322
Note. multipart/form-data 는 boundary 값이 필요하며, 세미콜론(;)로 구분, 데이터 구분 바운더리값은 반드시 설정한 boundary에 -- 값을 붙여 시작

Request Body 예시 - raw 사용 시
form-data 를 사용해도 되지만, raw 사용시 다음과 같이 /r/n이 제거된 상태로 호출 되어야 함.

Note. 개행은 반드시 \r\n 으로 구분, 각 데이터 바운더리는 "--" + "boundary 값" 으로 설정하며, Last boundary 는 구분 바운더리 값에 -- 를 추가하여 마무리 ("--" + "boundary 값" + "--")
POST /invoke/BOX_TEST:multipart HTTP/1.1User-Agent: PostmanRuntime/7.32.3Accept: */*Postman-Token: a4ae8d3b-3f16-4c76-9542-80041108a45fHost: 192.168.1.51:5555Accept-Encoding: gzip, deflate, brConnection: keep-aliveContent-Type: multipart/form-data; boundary=--------------------------297662709069591385314322Content-Length: 353----------------------------297662709069591385314322Content-Disposition: form-data; name="key1"; filename="test.json"Content-Type: application/json{"testKey" : "testValue"}----------------------------297662709069591385314322Content-Disposition: form-data; name="key2"test1----------------------------297662709069591385314322--
[추가 예시] 다중 파일 업로드 요청 시 서버 수신 HTTP 메시지 내용 예시 (다중 이미지 업로드)
POST /submit HTTP/1.1Host:my.server.comUser-Agent: Mozilla/5.0 Gecko/2009042316 FireFox/3.0.10Accept: text/html,application/xhtml+html,application/xml;q=0.9,*/*;q=0.8Accept-Language: en-us,en;q=0.5Accept-Encoding: gzip,deflateAccept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7Keep-Alive: 300Connection: keep-aliveReferer: http://my.server.com/test/index.htmlContent-type: multipart/form-data; boundary=myboudnaryvalueContent-length: 514--myboudnaryvalueContent-Disposition: form-data; name="datafiled1"; filename="r.gif"Content-Type: image/gifGIF871...............................D..;--myboudnaryvalueContent-Disposition: form-data; name="datafiled1"; filename="g.gif"Content-Type: image/gifGIF87a...............................D..;--myboudnaryvalueContent-Disposition: form-data; name="datafiled1"; filename="b.gif"Content-Type: image/gifGIF87a...............................D..;--myboudnaryvalue--