react-spring 파일 업로드/ react에서 이미지 뷰(jwt)
개인 프로젝트로 블로그 만들기를 구현하는 중입니다.
모든 프로젝트에 대한 설명은 할 수 없지만, 보안으로 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. 서버 측에서 토큰을 올바르게 인증하고 이미지에 접근할 수 있는지 확인해보세요. 서버 로그나 응답의 상태 코드 등을 확인해보시면 도움이 될 것입니다.
계속해서 어려움을 겪는다면, 더 자세한 정보와 에러 메시지 등을 알려주시면 더 정확한 도움을 드릴 수 있을 것 같아요.
74. 데이터 캐시 - 1 (이론) 강의 영상 누락
0
29
1
인가 코드 발급(프론트 vs 백)
0
28
2
lucide react 아이콘 설치
0
46
2
02-04 layout.tsx 구조가 달라요
0
60
2
10-6 실습 할 수 없습니다..
0
81
1
그림 예제는 따로 제공이 안되나요?
0
78
1
cacheLife에 대한 질문입니다
0
69
1
(제보) 쿠키를 브라우저 개발 환경에서 직접 삽입했을 때 나오지 않는 현상
0
70
2
디스코드 채널 초대 링크
0
69
1
동일하게 실습하는데 이상하게 페이지를 찾지 못하네요..
0
72
2
revalidatePath 질문 있습니다.
0
62
2
MainLayout이 중첩되어 뜨는 문제
0
81
2
쿠키와 헤더
0
61
2
구지 react를 사용하는 이유가 그럼 있는가?
0
81
1
카카오 클라이언트 시크릿
0
196
2
FormEvent가 deprecated 되었다고 합니다.
0
250
2
터보백이 안보입니다
0
65
2
젯브레인 웹스톰(jetbrains webstorm) 사용하시는 분들 참고
0
110
2
소스 코드 다운로드는 어디서 하나요.
0
78
2
22. REST 방식 컨트롤러 만들기(2), 29. 등록처리 부분 질문이 있습니다.
0
74
2
37강. 강의수업듣다 질문드립니다.
0
56
2
TodoDTO test 함수
0
80
3
로거 객체 질문
0
56
1
강사님 오타 있음요
0
77
2





