inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

따라하며 배우는 노드, 리액트 시리즈 - 쇼핑몰 사이트 만들기[전체 리뉴얼]

Multer를 이용해서 파일 업로드하기

파일 등록하면 이미지는 안나오고 파일명만 나와요..

256

종효

작성한 질문수 1

0

import React from 'react';
import Dropzone from 'react-dropzone';
import axiosInstance from '../utils/axios';

const FileUpload = ({ onImageChange, images }) => {

  const handleDrop = async (files) =>{
    let formData = new FormData();

    const config = {
      header: {'content-type': 'multipart/form-data'}
    }

    formData.append('file', files[0]);

    try{
      const response = await axiosInstance.post('/products/image', formData, config);
      onImageChange([...images, response.data.fileName]);
      
    }catch(error){
      console.error(error);
    }
  }


  return (
    <div className='flex gap-4'>

      <Dropzone onDrop={handleDrop}>
        {({ getRootProps, getInputProps }) => (
          <section 
            className='min-w-[300px] h-[300px] border flex items-center justify-center'
          >
            <div {...getRootProps()}>
              <input {...getInputProps()} />
              <p className='text-3xl'> + </p>
            </div>
          </section>
        )}
      </Dropzone>

      <div className='flex-grow h-[300px] border flex items-center justify-center overflow-x-scroll overflow-y-hidden'>
        {images.map(image => (
          <div key={image}>
            <img 
              className='min-w-[300px] h-[300px]'
              src={`${import.meta.env.VITE_SERVER_URL}/${image}`}
              alt={image}
            />
          </div>
        ))}
      </div>

    </div>
  );
};

export default FileUpload;

image.png

파일도 uploads에 다 들어가는데 파일명만 계속 나와요

react redux node.js 웹앱 mongodb

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

질문자님의 상황에서 이미지는 정상적으로 uploads 폴더에 저장되고 있으나, 프론트엔드에서 이미지 대신 파일명만 보이는 문제를 겪고 계신 것으로 보입니다. 코드를 살펴보면, 이미지를 업로드한 후 받는 응답에서 fileName을 이미지 배열에 추가하고 계시는데, 이후 해당 파일명을 통해 이미지 URL을 구성하여 <img> 태그의 src로 설정하고 계십니다.

제시해주신 코드와 유사한 상황이나 문제를 해결한 구체적 사례를 공유하고자 합니다. 본문의 코드와 직접적인 해결 방식을 포함하는 내용은 없으나, 다음의 사례도 파일 업로드 후 이미지를 표시하는 방식에 대한 논리적 문제를 다루고 있습니다:

  • 이미지 업로드 질문 - 여기서는 이미지 업로드 후 그 경로를 사용하여 이미지를 화면에 표시하는 방법에 대한 질문입니다. 문제 해결 방법으로 서버의 정적 파일 제공 설정 및 클라이언트에서의 이미지 URL 구성이 언급되어 있습니다. 특히 서버에서 해당 이미지 파일에 접근할 수 있는 URL 경로가 제대로 설정되어 있는지 확인할 필요가 있습니다.

교훈적인 부분과 더불어, 개발 과정에서는 서버와 클라이언트 양쪽에서 파일명 또는 파일 경로를 정확하게 처리하는 것이 중요합니다. 특히, axios 응답에서 받은 fileName으로 직접 URL을 구성할 때는, 서버 측에서 제공되는 정확한 경로(prefix 포함)를 사용해야 합니다.

질문자님의 경우, 다음과 같은 사항을 확인해 볼 것을 추천합니다:
1. 서버 설정: 업로드된 파일을 제공하는 라우트(URL 경로) 설정이 적절한지 확인하세요. 예를 들어, express.static 미들웨어를 사용하여 uploads 폴더를 정적 파일로 제공하는 설정이 있는지 검토하세요.
2. 클라이언트 코드: <img> 태그의 src 속성으로 사용되는 URL이 실제 이미지 파일을 가리키는 완전한 경로인지 확인하세요. 예를 들어, 환경 변수 import.meta.env.VITE_SERVER_URL의 값과 함께 경로가 제대로 구성되어 있는지 확인하세요.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

강의 내용은 훌륭하나, 환경 설정 오류 때문에 진도를 나갈 수 없습니다. 20년 버전 강의.

0

66

1

강의자료는 어디서 볼 수있나요??

0

74

1

이 쇼핑몰 만들기 강의는 관리자페이지 만드는건 없나요

0

127

2

웹에서 실시간 코드반영이 안돼요

0

128

1

app.use질문

0

68

1

강사님께 어떻게 직접질문할수있어요??

0

81

1

const함수같은거 기초강의는 어디있나요

0

90

2

리덕스 참조챕터가 어딨어요? 미리듣고오라는데요

0

84

2

강의가완전 오래되서 다 틀리네 app.jsx도 tailwind css 다틀림 무책임함

0

72

1

개발자도구에 redux란이 없어요

0

93

1

npx tailwindcss init -p 에서 계속 에러나요

0

97

1

쇼핑몰기능중 찜하기 기능은 어떻게 구현하나요

0

145

2

강의하다 줌으로 설명가능한지좀 정확히 알려주세요. 이 선생님 정책이 어떻게 되는데요. 직접 연락할 메일이라도 알려주세요

0

45

1

도표 강의 자료 열람 불가능

0

112

1

tailwindcss를 vite에서 이용하는 방식이 바뀐것 같습니다.

0

1142

2

eslint 설정 후 오류가 납니다.

0

225

1

오버로드 오류

0

155

1

VSCode에서 save를 할 때, landingpage의 useEffect가 실행되는 문제에 대하여

0

175

1

dispatch(logoutUser()) 실행시 dispatch(authuser())도 함께 실행되는 문제

0

234

2

logout할 때, server로 요청을 보내서 authUser middleware를 통과하도록 하는 이유?

0

197

1

webkit-text-size-adjust 오류

0

318

1

does not provide an export named 'userReducer'

0

220

2

빌드 배포

0

141

1

삭제 예정 강의는 언제 삭제 되나요? 저것때문에 수강완료를 못하면 회사에서 비용을 청구한다고 합니다~

0

227

2