-
자바스크립트에서 이미지 파일( form data ) 을 ajax로 넘기는 방법!Knowledge/javascript 2019. 9. 18. 19:41반응형
단순히 text value만 넘긴다고 하면 form data를 굳이 ajax로 넘겨야 할 필요는 없다.
그러나 파일을 ajax로 넘겨야할 때는 form data 전체를 넘기는 것 외엔 다른 방법이 없다.
이 때는 formData 객체를 활용하면 된다. 방법은 쉽다. 함정이 좀 있지만.. ㅋ
일단 코드를 보자!
1234567891011121314151617181920212223242526272829<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title></head><body><input type="file" id="fileInput"><button type="submit" id="sendButton">전송</button><script>var fileInput = document.querySelector("#fileInput");var sendButton = document.querySelector("#sendButton");sendButton.addEventListener("click",function(){var formData = new FormData();// form Data 객체 생성formData.append("attachedImage",fileInput.files[0]);// 파일 인풋에 들어간 파일들은 files 라는 리스트로 저장된다.// input에 multiple을 선언해 여러개의 파일을 선택한 경우가 아니라면// files[0] 으로 input에 추가한 파일 객체를 찾을 수 있다.});</script></body>cs 위와 같이 formData 객체를 생성하고
거기에 formData로 넘길 것들을 append로 더해주면 된다
이제 formData를 ajax로 넘겨만 주면 끝인데 함정이 있다.
attachedImage를 append 하고 formData를 console.log로 찍어보면
formData 객체가 찍히긴 하는데 keys와 values 어디에도 추가해 준 데이터를 확인할 수 없다.
아무리 이런 저런 포스팅이 있어도 개발자라면 이런 상황에서 불신을 품기 마련 ( 나만 그런가..?ㅋ )
필자도 콘솔에 안찍히길래 이거 추가 안됐구나 싶어서 한참 다른 방법을 찾았는데
알고보니 단순히 console.log(formData)로 찍으면 내용을 확인할 수 없는게 브라우져 정책이라고..
그래서
123for (var pair of formData.entries()) {console.log(pair[0]+ ', ' + pair[1]);}cs 이렇게 적어줘야 한단다. 이러면
formData에 잘 append 되었음을 확인할 수 있다.
오케이 확인도 했으니 이제 ajax로 넘겨주기만 하면 된다.
넘기는 건 보통의 ajax 보낼때와 같다.
12345678910var oReq = new XMLHttpRequest();oReq.addEventListener("load", function() {if(oReq.status == 200){location.href = "/reservation/myreservation";}});oReq.open("POST", "/reservation/api/reservations/"+reservationInfoId+"/comments",true);oReq.send(formData);cs 이렇게 send 메소드에 파라미터로 formData만 넘겨주면 formData를 백엔드로 잘 넘겨줄 수 있다
참고
반응형'Knowledge > javascript' 카테고리의 다른 글
자바스크립트 모듈(Module) 학습 내용 간단 요약 (0) 2020.05.03 Javascript ES6 에 추가된 기능 간단 정리 (0) 2019.11.15 javascript this와 bind (0) 2019.09.15 javascript 객체 리터럴 패턴과 생성자 패턴, prototype (0) 2019.09.09 데이터 바인딩을 도와주는 handlebars.js 사용법 (0) 2019.08.26