티스토리 뷰

BackEnd/JAVA

[Ch02] 4. 파일 업로드

JINSUKUKU 2021. 12. 10. 17:27

📕 제 2장 웹 프로그래밍 기초 다지기

2.4 파일 업로드

- 웹 서버에 바이너리 데이터를 보내기 위해 고안된 멀티파트 인코딩 방법을 알아보자

- 이를 위한 <form> 태그의 설정 방법에 대해서도 함께 다루도록 한다

 

 

파일 업로드를 위한 <form> 태그 설정 : 멀티 파트 인코딩

<form action="FileUploadServlet" method="post" enctype="multipart/form-data">
	<input type="file" name="photo"><br>
	<textarea name="description" cols="50" row="3"></textarea><br>
	<input type="name" value="추가"><br>
</form>

 

<form> 태그의 enctype 속성

- <form> 태그의 enctype 속성은 데이터가 서버로 제출될 때 해당 데이터가 인코딩 되는 방법을 명시한다

- 이 속성은 <form> 요소의 method 속성값이 “post”인 경우에만 사용할 수 있습니다.

- 기본 값은 aplplication/x-www-form-urlencoded 을 사용한다

- 바이너리 데이터를 보내기 위해서는 multipart/form-data 으로 인코딩해야 한다

 

<input type="file">

- 이미지나 동영상과 같은 바이너리 데이터를 전송해야 하므로, <input> 태그의 type속성은 file로 지정한다

 

 

멀티파트 방식의 POST 요청 프로토콜 분석

멀티파트(Multipart) 방식

- 웹 클라이언트가 요청을 보낼 때, HTTP 프로토콜의 바디 부분에 데이터를 여러 부분으로 나눠서 보내는 것

- 웹 클라이언트가 서버에게 파일을 업로드할 때, http 프로토콜의 바디 부분에 파일 정보를 담아서 전송한다

- 파일을 한 번에 여러 개 전송을 하면 body 부분에 파일이 여러 개의 부분으로 연결되어 전송된다

- 이렇게 여러 부분으로 나뉘어서 전송되는 것을 Multipart data라고 한다

- 일반적으로 파일을 전송할 때 사용한다

 

멀티파트(Multipart) 전송 방식과 일반 전송 방식의 차이점

- POST 요청에서의 멀티파트 전송, 일반 전송의 가장 큰 차이점은 Content-Type 헤더와 메시지 본문의 형식이다

 

# 일반 전송 방식의 Content-Type 헤더 → enctype 속성의 기본값
Content-Type : application/x-www-form-urlencoded
# 멀티 파트 전송 방식의 Content-Type 헤더
Content-Type : multipart/form-data; boundary=----Web ... PyZ

 

- 일반 전송 방식과 달리 멀티 전송 방식 Content-Type 헤더는 데이터의 미디어 형식과 파트 구분자를 정의한다

- 바이너리 파일을 전송할 때에는 multipart/form-data으로 인코딩해야 한다

- Content-Type 헤더를 통해 미디어 타입은 인코딩한 multipart/form-data 임을 확인할 수 있다

 

 

멀티 파트 전송의 데이터 형식

- GET, POST 요청에서 웹 서버에 보내는 문자 매개변수는 & 문자를 사용해 구분했다

- 바이너리 데이터에는 & 문자가 포함될 수 있어서, & 문자를 구분자로 사용할 수 없다

- 이와 같은 이유로 데이터에 파일을 첨부할 때에는 특별한 구분자를 사용해야 한다

- Contente-Type 헤더의 boundary 값이 바로 각각의 매개 변수 값을 분리하는 구분자를 정의한 것이다

- 구분자는 웹 브라우저에서 임의로 생성하고, 웹 서버에서는 구분자를 통해 메시지 본문에서 매개변수를 분리한다

 

--------- WebKitFormBoundarylzaNhdxGzpZNljbo 
Content-Disposition: form-data; name="photo"; filename="IMG_0283.JPG"
Content-Type: image/jpeg

--------- WebKitFormBoundarylzaNhdxGzpZNljbo 
Content-Disposition: form-data; name="description"

 

- 파트 구분자의 다음 라인에는 매개변수의 정보가 명시되어 있다

- 매개변수의 데이터가 파일인 경우, 파일명과 콘텐츠 유형 정보가 추가된다

- 공백 라인 이후부터 다음 파트 구분자를 만날 때 가지 첨부 파일의 데이터가 온다

 

 

- 멀티 파트 형식으로 데이터를 보낼 때는 웹 서버에서도 그에 맞추어 데이터를 분리하고 해석해야 한다

- 자바 웹 프로그래밍에서도 일반적인 형식과 멀티 파트 형식을 구분하여 데이터를 처리한다

 

 

 

'BackEnd > JAVA' 카테고리의 다른 글

[Ch02] 5. 정리  (0) 2021.12.10
[Ch02] 3. POST 요청  (0) 2021.12.10
[Ch02] 2. GET 요청  (0) 2021.12.10
[Ch02] 1-5. HTTP 클라이언트 만들기  (0) 2021.12.10
[Ch02] 1-4. HTTP 응답  (0) 2021.12.10
댓글
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
최근에 올라온 글
글 보관함
Total
Today
Yesterday