이미지 업로드 방법

eggMun·2023년 2월 15일
0

오늘은 이미지 업로드 방법을 적어보려고 한다!!

  const [imageUrls, setImageUrls] = useState(["", "", ""]);

먼저 image 주소를 담을 변수를 선언한다.
image 주소를 배열형태로 서버에 보내기 위해 배열로 초기값을 주었다.

   {imageUrls.map((el, index) => (
            <div key={uuidv4()} style={{ margin: 30 }}>
              <img
                style={{ width: 50, height: 50 }}
                src={"https:/storage.googleapis.com/" + imageUrls[index]
              ></img>
              <input
                type="file"
              ></input>

그리고 input 태그에 "file" 타입을 준다.
그러면 파일을 인풋 태그에 넣을 수 있다.
그리고 img 태그 src 속성에 이미지 주소를 넣는다.

const onChangeImageUpload = (event: ChangeEvent<HTMLInputElement>) => {
      const file = event.target.files?.[0]; 
      const result = await upload_file({
        variables: { file: file },
      });
    };

그리고 onChangeImageUpload라는 함수를 선언한다.
그리고 file라는 변수를 선언하고 event.target.files?.[0];으로 이미지 주소를 file 변수에 저장한다.
그 다음에는 서버에 이미지를 보낸다.
그러기 위해 reuslt 변수에 api 요청을 작성하였다.

const onChangeImageUrls = (imageUrl: string, index: number) => {
    const newImageUrls = [...imageUrls]; // newImageUrls = ["", "", ""] // 얕은 복사
    newImageUrls[index] = imageUrl; // ["imageSrc1.png" , "", ""] = "imageSrc1.png" // 인덱스가 0일 경우
    setImageUrls(newImageUrls); // ["imageSrc1.png" , "", ""] = "imageSrc1.png" // 인덱스가 0일 경우
  };

그리고 onChangeImageUrls 함수를 선언해 준다.
이 함수에는 매개변수로 하나의 이미지 주소와 배열의 인덱스 값을 받을거다.
그리고 imageUrls 변수에 ima 주소 값을 넣어주기 위해 인덱스에 맞는
즉 순서에 맞는 배열의 칸에 이미지를 넣어준다.
그리고 원본 배열을 건드리지 않기위해 얕은 복사를 하고 넘겨준다.

 const onChangeImageUpload =
    (index: number) => async (event: ChangeEvent<HTMLInputElement>) => {
      const file = event.target.files?.[0]; // file.name = "imageSrc1.png"
      const result = await upload_file({
        variables: { file: file },
      });
      onChangeImageUrls(result.data?.uploadFile.url, index);
      //  result.data?.uploadFile.url = imageSrc1.png
    };

그리고 onChangeImageUpload함수를 onChangeImageUrls이 함수 안에 넣는다.
즉 onChangeImageUrls이 함수가 실행이 되면서 onChangeImageUpload 함수가 실행이되어 imageUrls 변수에 이미지가 하나씩 담기게 된다.
그리고 onChangeImageUrls(result.data?.uploadFile.url, index) 이 함수를 호출할 때 매개변수로 이미지 주소와 인덱스 값을 넣어준다.
그러면 이미지 업로드는 끝이다!!

profile
블로그 이전: https://medium.com/@eggmun98

0개의 댓글