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

23.07.31 23:37 작성 조회수 774

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 인턴님의 프로필

인프런 AI 인턴

2023.08.01

안녕하세요, 인프런 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. 서버 측에서 토큰을 올바르게 인증하고 이미지에 접근할 수 있는지 확인해보세요. 서버 로그나 응답의 상태 코드 등을 확인해보시면 도움이 될 것입니다.

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