form태그는 multipart/form-data
[ multipart/form-data ]
form태그로 파일이나 이미지를 서버로 전송할 때 주로 사용
출처 : https://velog.io/@ksk7584/Multipart
type이 file
일반적인 글자와 파일을 전송할 때, 컨텍스트 타입을 내가 보내려는 파일 확장자로 하면 된다. png파일을 보내고 싶으면 img/png 이런 식으로. 그러나 form태그는 이런 MIME 타입을 지원하지 않기 때문에 AJAX를 써야한다. 그러나 이건 IMG와 X-FORM 타입을 둘 다 보내는 것! enctype="multipart/form-data"를 사용하면 된다!! -> 여러 타입의 컨텐트 타입을 동시에 보낼 수 있다! -> 파트별로 분리해서 보냄 -> IMG 파일을 문자로 바꿔서, HttpRequest Body에 담아 서버로 전송하는 것!
[ boundary ]
절대 충돌되지 않는 [ boundary:-----XXX ] 같은 형식이 바디 데이터에 여러개가 들어감 [ -----XXX ] 가 각자의 컨텐트 타입을 들고 전송하는 것
[ multipart/form-data 형식으로 이미지를 전송할 때 필요한 데이터 ]
1. 이미지 파일 자체 이미지를 이진(binary) 형식으로 변환하여 전송 2. MIME 타입 이미지 파일의 MIME 타입을 명시하여 서버가 전송된 데이터를 올바르게 해석할 수 있도록 한다. 3. 파일 이름 이미지 파일의 원본 파일 이름을 명시하여 서버가 이미지 파일을 올바르게 처리할 수 있도록 한다. 4. 다양한 메타데이터(선택적) 필요에 따라 이미지와 함께 추가적인 정보(예: 이미지 설명, 사용자 입력 등)를 함께 전송할 수 있다.
[ 이런 데이터가 전송된다 ]
[ header ] 1. url : /uploadCheck 2. method : post 3. content-type : multipart/form-data; boundary=----jooho [ body ] ----jooho x-www-form-urlencoded title=제목1 ----jooho // image/jpeg //이건 x-from데이터가 아니라서 키=value 이렇게 날아가지 않는다. image/jpeg; name=imgFile; fileName=hello.jpeg 베이스 64로 인코딩된 문자열 -> 이런 형식으로 전송 된다.
----를 쓰는 이유는 이런 데이터가 들어올 리가 없으니까 일부러 이렇게 쓰는 것이다.
이런 데이터가 버퍼에 담기고, 그걸 직접 파싱할 수도 있는데… 스프링이 알아서 다 해준다.
Share article