<input type="file" name="reviewImg" id="reviewImageFileOpenInput" accept="image/*">
form data를 통해 file upload를 할 수 있다.
- type : input tag에 들어갈 type 선언
- name : server에서 인식 할 수 있게 name 선언
- id : client에서 제어를 위해 id 선언
- accept : 허용 가능한 file type 제한
일반적인 form 데이터 전송 시에 HTTP Header에는 기본적으로
Content-Type:application/x-www-form-urlencoded 라는 정보로 노출 됩니다.
그러나 file을 전송할 때는 좀 다릅니다.
Form 태그의 속성으로, enctype를 multipart/form-data로 지정해야 합니다.
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7rKYKhIWaTrjvGi1
크롬 개발자 도구의 network탭 정보
------WebKitFormBoundaryiUIOhJXAwxorM25j
Content-Disposition: form-data; name="email"
werwerw@sefdsf.com
------WebKitFormBoundaryiUIOhJXAwxorM25j
Content-Disposition: form-data; name="password"
werwerwerwerwer
------WebKitFormBoundaryiUIOhJXAwxorM25j
Content-Disposition: form-data; name="reviewImg"; filename="A_Pen_by_younjisu.png"
Content-Type: image/png
------WebKitFormBoundaryiUIOhJXAwxorM25j--
file이 아닌 다른 input 데이터와 함께 보낼 경우 예제
<div class="formWrap">
<form action="/join" method="post" id="myform" enctype="multipart/form-data">
<div class="inputWrap">
<div class="email">
<span> Email </span> <input type="text" name="email"><br/>
</div>
<div class="password">
<span> Password </span> <input type="password" name="password"><br/>
</div>
<input type="file" name="reviewImg" accept="image/*">
</div>
<input class="sendbtn" type="submit">
</form>
</div>
실제로는 파일을 보낼 때는, 보통 다른 데이터와 별도로, 먼저 보내는 경우도 많습니다.
생각해보기
- file upload를 Ajax기술로 구현할 수 있을까요? 네 가능합니다.
- 약간 더 복잡한 처리를 해야하지만, FormData라는 속성을 이용하면 좀더 쉽게 구현할 수가 있습니다.
참고 자료
[참고링크] Using FormData Objects
[참고링크] file input 처리하는 방식 설명
[참고링크] multipart 보낼때 데이터 구분에 대한 내용
'프로젝트 정리 > Naver Boost Course' 카테고리의 다른 글
로깅이란 (0) | 2021.04.15 |
---|---|
file upload의 확장자검사 및 썸네일노출 (0) | 2021.03.30 |
네이버 부스트 코스 풀스택 과정 리팩토링 시작 (0) | 2021.03.24 |
BE_PJT E-1. 예약관리 시스템: 예약하기 (0) | 2021.03.24 |
BE_PJT D-1. 예약관리 시스템: 상세페이지 (0) | 2021.03.24 |