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

김태홍님의 프로필 이미지
김태홍

작성한 질문수

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

예제로 구현하는 파일 업로드, 다운로드

새 탭으로 이미지 열기 질문입니다.

해결된 질문

작성

·

817

0

강의내용중 31:24초 부분에 해당하는 질문입니다.

다른 사이트 이미지를  마우스 우클릭후, '새탭으로 이미지 열기'로 보면 제대로 이미지가 새탭으로 출력이되서 보이는데,

 

이 프로젝트 코드는 새 탭으로 이미지 열기를 사용하는데

31:20초  /items/1  경로의 이미지처럼 나오지않고

문자형태로 출력이되는지 궁금합니다.

 

또한 이처럼 31:24초처럼  이미지가 문자형태로 출력되지 않고  다른사이트(구글,네이버)처럼 새탭으로 이미지를 열어도 정상적으로 이미지가 출력되게 하기위해선 어떻게 해야하나요?

답변 1

3

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 김태홍님

Q: 31:20초  /items/1  경로의 이미지처럼 나오지않고...

-> 응답시 content-type을 image/png와 같이 이미지로 정확하게 지정해주시면 됩니다.

감사합니다.

김영한님 답변을 참조하여 코드를 작성해보았습니다.

 

v1. png 이미지 전용

@ResponseBody
@GetMapping(value = "/images/{filename}", produces = MediaType.IMAGE_PNG_VALUE)
public Resource downloadImageV1(@PathVariable String filename) throws MalformedURLException {
    return new UrlResource("file:" + fileStore.getFullPath(filename));
}

참조 : https://lazymankook.tistory.com/74

 

v2. 모든 Content-Type 사용

@GetMapping("/images/{filename}")
public ResponseEntity<Resource> downloadImageV2(@PathVariable String filename) throws IOException {
    String fullPath = fileStore.getFullPath(filename);
    MediaType mediaType = MediaType.parseMediaType(Files.probeContentType(Paths.get(fullPath)));
    UrlResource resource = new UrlResource("file:" + fullPath);
    return ResponseEntity.ok()
            .header(HttpHeaders.CONTENT_TYPE, mediaType.toString())
            .body(resource);
}
김태홍님의 프로필 이미지
김태홍

작성한 질문수

질문하기