생성자는 아래와 같다.
let formData = new FormData([form]);
formData.append(name, value) // value는 문자열로 들어간다.
메서드
formData.append(key, value)
데이터를 추가.
formData.delete(key)
특정 데이터를 삭제.
formData.get(key)
특정 키의 데이터를 가져옴.
formData.has(key)
특정 키가 존재하는지 확인. true, false 로 반환해준다.
formData.set(key, value)
특정 키에 데이터를 설정(기존 데이터 덮어쓰기).
formData.getAll(key)
특정 키에 해당하는 모든 값의 배열을 반환
console.log(formData.getAll('name'));
formData.keys()
FormData 객체의 모든 키를 반복 가능한 객체로 반환
for (const key of formData.keys()) {
console.log(key);
}
formData.values()
FormData 객체의 모든 키를 반복 가능한 객체로 반환
for (const value of formData.values()) {
console.log(value);
}
formData.entries()
모든 키-값 쌍을 Iterator 객체로 반환.
for (const [key, value] of formData.entries()) {
console.log(key, value);
}
HTML 사용법
파일의 경우, new FormData(form) 을 작성하게 되면, <form> 에 작성한 내용이 자동으로 FormData에 담겨지게 된다.
<form id="myForm">
<input type="text" name="username" value="JohnDoe">
<input type="file" name="profile">
</form>
<script>
const form = document.getElementById('myForm');
const formData = new FormData(form); // HTML 폼 데이터를 자동으로 수집
fetch('/submit', {
method: 'POST',
body: formData,
});
</script>
Javascript 사용법
HTML 폼 요소에서 FormData 생성
const formElement = document.querySelector('form');
const formData = new FormData(formElement); // 폼의 모든 데이터를 초기화
동적으로 추가
const formData = new FormData();
formData.append('username', 'Alice'); // 동적으로 필드 추가
formData.append('age', 25);
수정(덮어쓰기)
const formData = new FormData();
formData.append('username', 'Alice');
formData.set('username', 'Bob'); // 기존 값을 덮어씀
for (const [key, value] of formData.entries()) {
console.log(key, value);
}
// 출력: username Bob
삭제
const formData = new FormData();
formData.append('username', 'Alice');
formData.delete('username'); // 특정 키 삭제
POST /upload HTTP/1.1
Host: example.com
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary12345
------WebKitFormBoundary12345
Content-Disposition: form-data; name="username"
Alice
------WebKitFormBoundary12345
Content-Disposition: form-data; name="profilePic"; filename="photo.png"
filename="photo.png"
Content-Type: image/png
<파일의 바이너리 데이터가 위치하는 자리..>
------WebKitFormBoundary12345--
위 내용을 해석해보면 아래 두가지 데이터임을 알 수 있다.