인프런 커뮤니티 질문&답변

engh0205님의 프로필 이미지
engh0205

작성한 질문수

react-spring 파일 업로드/ react에서 이미지 뷰(jwt)

해결된 질문

작성

·

1K

0

개인 프로젝트로 블로그 만들기를 구현하는 중입니다.

모든 프로젝트에 대한 설명은 할 수 없지만, 보안으로 jwt token을 사용하고있고, multipartfile을 통해서 게시글 내에 이미지, 영상, 기타 파일 등을 함께 첨부하여 게시글을 작성할 수 있도록 기능을 구현하였습니다.

파일 업로드 단계까진 잘 되었고, 우선 로컬 저장소를 사용하여 파일은 스프링 부트 프로젝트 내 resources/static/ ~ 이하 이미지:img, 영상:video, 기타 파일:file 로 세부 디렉토리를 나눠서 접근하도록 하였습니다. 우선 사진으로만 테스트 해보는 중인데, 리액트에서 파일을 보여주는 데에 어려움을 겪고있습니다.

export const getImageApi = async (token: string | null, imageName: string) => {
    const url = `http://localhost:4000/api/images/${imageName}.jpg`;
    try {
        const response = await axios.get(url, {
            headers: {
                Authorization: `Bearer ${token}`,
            },
        });

        const result = response.data;
        return result;
    } catch (error) {
        console.error("Error fetching board data:", error);
        return null;
    }
};

토큰을 이용해야만 파일에 접근이 가능하기에, 이런식으로 따로 api를 설정하고 접근하는 방식으로 해보려고 하는데 제 생각처럼 잘 되지 않습니다. 해당 api를 통한 요청을 포스트맨으로 조회해보니 이진화 된 파일이 응답으로 나오곤 하는데, 이를 다시 원본으로 복구한 후에 보여줘야하는 것 같은데,, 아직 많이 부족해서 어떤식으로 해야할지 잘 모르겠습니다.

리액트 - 스프링(부트)를 사용하면서 파일 업로드/다운로드(조회)를 할 때, 이런 방식을 사용하는 것이 바람직한 것인지, 단순히 사진을 업로드 하고 조회할 때에 이정도 복잡한 수준으로 구현하는 것이 일반적인 것인지 궁금하고 더 간단하거나 쉽게 할 수 있는 방법이 있다면 알려주시면 감사하겠습니다.

첫 질문이라 소스코드를 많이 올리는 것이 번잡할까 싶어 많이 올려두지 않았습니다. 혹시 도움을 주실 때 관련 소스코드를 필요로 하신다면 보내드리도록 하겠습니다. 감사합니다.

답변 1

0

안녕하세요, 인프런 AI 인턴이에요.

리액트에서 이미지를 보여주기 위해서는 이미지 URL을 사용하여 이미지 요소를 적절히 렌더링해주어야 합니다. 사용자의 코드를 보면 getImageApi 함수에서 이미지 URL을 생성하고 axios를 통해 해당 URL로 GET 요청을 보내는데요. 이 부분에서 어려움을 겪고 계신다고 하셨는데, 어떤 어려움을 겪고 계신지 조금 더 구체적으로 설명해주실 수 있을까요?

여기서 주의해야 할 점은 이미지 URL을 올바르게 생성해야 한다는 것입니다. 예를 들어, http://localhost:4000/api/images/${imageName}.jpg와 같은 형식으로 URL을 생성하셨는데, ${imageName} 부분을 정확하게 해당 이미지의 파일 이름으로 대체해주어야 합니다. 그리고 해당 URL에 접근하는데에는 토큰이 필요하다고 하셨는데, 토큰을 올바르게 요청 헤더에 담아서 보내주시면 됩니다. 헤더에 Authorization 필드에 Bearer ${token} 형태로 토큰을 담아서 보내주시면 됩니다.

만약 이미지가 정상적으로 요청되지 않는다면, 다음 사항들을 확인해보세요.
1. 이미지 URL이 올바르게 생성되었는지 확인해주세요. ${imageName} 부분이 실제 이미지 파일 이름으로 올바르게 대체되었는지 확인해보세요.
2. 토큰이 올바르게 요청 헤더에 담겼는지 확인해주세요. 토큰이 유효한지, 헤더에 올바르게 추가되었는지 다시 한 번 확인해보세요.
3. 서버 측에서 토큰을 올바르게 인증하고 이미지에 접근할 수 있는지 확인해보세요. 서버 로그나 응답의 상태 코드 등을 확인해보시면 도움이 될 것입니다.

계속해서 어려움을 겪는다면, 더 자세한 정보와 에러 메시지 등을 알려주시면 더 정확한 도움을 드릴 수 있을 것 같아요.

engh0205님의 프로필 이미지
engh0205

작성한 질문수

질문하기