회원가입페이지를 만들면서 회원정보와 프로필사진(이미지 파일)을 함께 formData에 보내주어야 하는 경우가 생겼다.
FormData은 HTML 폼 데이터로, 폼의 각 필드와 값을 나타내는 키/값 쌍들의 집합을 쉽게 구성할 수 있는 방법을 제공한다. 바디에 FormData 객체를 넣으면, HTTP 메시지는 인코딩되고, Content-Type 속성은 multipart/form-data로 지정한 후에 데이터가 전송된다.
FormData에 ”profile”과 ”signup”에 각각 파일과 이메일 닉네임, 등의 데이터를 담아 보냈더니 에러가 발생했다. 알고보니 파일은 multipart/form-data로, 그 외 json 데이터들은 application/json 형식으로 따로 보내야했다.
Blob(Binary Large Object, 블랍)은 바이너리 형태중에서도 큰 객체를 의미하는데, 이미지, 비디오 사운드와 같은 멀티미디어 데이터를 다룰 때 사용된다.
따라서 file은 multipart/form-data, data는 application/json 형식으로 보내기 위해 Blob을 사용했다.
// 회원가입버튼 클릭
const signupButtonHandler = (e) => {
e.preventDefault();
const formData = new FormData();
formData.append("profile", profileImg);
const signup = {
nickName,
gender,
role,
password,
email,
};
formData.append(
"signup",
new Blob([JSON.stringify(signup)], { type: "application/json" })
);
if (signupActive) {
if (!isemailChecking) {
alert("이메일 인증을 완료해주세요!");
return;
}
signupMutation.mutate(formData);
} else {
alert("회원정보를 모두 입력해주세요!");
}
};
'리액트' 카테고리의 다른 글
[리액트]중복 검색 요청 방지를 위한 debouncing 적용 (0) | 2023.06.27 |
---|---|
새로고침하면 휘발하는 redux, redux-persist 로 유지하기 (0) | 2023.06.09 |
리덕스툴킷(redux-toolkit)으로 리액트 로그인 (0) | 2023.05.30 |
useCallback과 React.Memo을 통한 불필요한 리렌디링 막기 (0) | 2023.05.24 |
CryptoJS를 활용한 RefreshToken 암호화 및 복호화 - 안전한 로그인 토큰 관리 방법 (0) | 2023.05.24 |
댓글