반응형
유저의 프로필 이미지 변경하는 기능은 추후에 참고할 일이 생길 것 같아 기록해본다.
프로필 이미지를 변경해주는 로직은 텍스트 에디터에서 이미지를 핸들링해주었던 방법과 비슷하다. 엔드포인트도 같았다.
간단히 진행 방식을 기록해보자.
1. 파일 업로드를 위한 input 태그를 만들어준다.
// 프로필 이미지 수정을 위한 ref
const fileInput = useRef<HTMLInputElement>(null);
<div>
<EditUserImg
src={revisedImage || profileUrl}
alt="프로필 사진"
onClick={onClickImg}
/>
<input
type="file"
accept="image/jpg,impge/png,image/jpeg"
name="profile_img"
className="image_upload"
onChange={onChangeImage}
ref={fileInput}
/>
2. 이미지 클릭시 ref가 input 태그를 가리킨 후 파일 업로더가 뜨도록 한다.
// 프로필 이미지 클릭시 파일 업로더 뜸
const onClickImg = () => {
if (fileInput.current) {
fileInput.current.click();
}
};
// image uploader
const onChangeImage = async (e: React.ChangeEvent<HTMLInputElement>) => {
e.preventDefault();
const uploadFile = e.target.files[0];
const formData = new FormData();
formData.append("file", uploadFile);
const responseUrl = await convertImageUrl(formData);
setRevisedImage(responseUrl);
};
이미지 핸들링 함수는 텍스트 에디터에서 했던 방식과 동일하다.
convertImageUrl 함수는 서버에 이미지 처리를 요청하여 s3에 이미지를 저장되면 url 을 반환받는 네트워크 통신 함수이다.
export const convertImageUrl = async (formData: any): Promise<any> => {
const response = await axios.post("/upload", formData, {
headers: {
"Content-Type": "multipart/form-data",
},
});
return response.data.data.path;
};
반응형
'코드스테이츠 SEB FE 41기 > Main-Project(MatP)' 카테고리의 다른 글
[react & typescript]리코일 찍먹(?) 사용기 - 로그인한 유저 정보 저장하여 전역 상태로 관리하기(feat. recoil) (0) | 2023.02.02 |
---|---|
[회고] Main project '맛P' 회고 (1) | 2023.02.01 |
[react & typescript] useAxios 커스텀 훅 사용기2 - 데이터 실시간 업데이트해보기 (0) | 2023.01.31 |
[react & typescript] MUI Popover 사용기(Delete confirm 기능) (0) | 2023.01.31 |
[react] 간단히 star rating chart 구현하기(feat. typeScript) (0) | 2023.01.25 |