작성
·
110
0
리액트로 이미지를 조회하려는데 자꾸 404 Not Found가 반환되요.
포스트맨으로 동일한 조건으로 요청을 하면 제대로 이미지가 반환이 되네요.
async function getIamge(filename){
await axios.get(`http://localhost:8080/imageFiles/${filename}`)
.then((action)=>{
let data = action.data;
let copy = [...images,data];
setImages(copy);
})
.catch((error)=>{
console.log('서버 응답 코드:', error.response.status);
console.log('서버 응답 데이터:', error.response.data);
console.log('서버 응답 헤더:', error.response.headers);
})
}
이런식으로 요청을 했습니다. img태그로 직접 엔드포인트로 요청을 보냈을 때도 똑같은 상황입니다.
@GetMapping("/imageFiles/{filename}")
@CrossOrigin(origins = "*")
public ResponseEntity<Resource> downloadExecute(@PathVariable("filename") String filename) throws IOException {
log.info("Full Path = {}", fileDir + filename);
String str = URLEncoder.encode(filename, "UTF-8");
Path path = Paths.get(fileDir + filename);
Resource resource = new InputStreamResource(java.nio.file.Files.newInputStream(path));
System.out.println("resource : "+ resource.getFilename());
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_TYPE, "application/octect-stream")
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename="+str+";")
.body(resource);
}
이미지를 보내주는 서버측 엔드포인트입니다.
@Configuration
public class CorsMvcConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
//.allowedOrigins("http://localhost:3000")
.allowedOrigins("*")
.allowedMethods(
HttpMethod.GET.name(),
HttpMethod.POST.name(),
HttpMethod.HEAD.name(),
HttpMethod.PUT.name(),
HttpMethod.DELETE.name()
);
registry.addMapping("/imageFiles/**")
.allowedOrigins("*")
.allowedMethods(
HttpMethod.GET.name(),
HttpMethod.POST.name(),
HttpMethod.HEAD.name(),
HttpMethod.PUT.name(),
HttpMethod.DELETE.name()
);
}
}
cors설정도 해봤는데 결과는 똑같았습니다. 뭐가 문제일까요 ㅠ
답변 1
0
안녕하세요! yuniyuni님! 🙂 우선 보내주신 코드로만 내용을 정확한 원인을 확인하기에도 어렵고, 이미지를 직접 컨트롤러에서 처리하는 경우는 강의와 관련이 적어서 직접적으로 문제를 해결해드리기 어려울 것 같아요 😢
다만 몇 가지 말씀을 드려보면...
만약 서버에서 직접 이미지를 내려주고 싶으시다면, 추가로 올려 놓은 영상인 <스프링 부트의 정적 파일 처리> 영상을 확인해보시기 바랍니다. 해당 기능을 적절히 이용하면, Controller 코드를 단 한 줄도 작성하지 않고 이미지를 서버에서 클라이언트로 전송할 수 있습니다.
만약 이미지 업로드 + 다운로드 기능을 고민하고 계시다면 보통은 S3와 같은 외부 이미지 저장소와 함께 구현하는 것이 일반적입니다. S3를 중심으로 구글에 검색해보시면 많은 자료가 나올 것 같아요!
감사합니다! 🙇