쌓고 쌓다

[스프링 부트] 파일 응답 및 이미지 출력, MIME 타입 확인 - 19 본문

프로그래밍/spring

[스프링 부트] 파일 응답 및 이미지 출력, MIME 타입 확인 - 19

승민아 2023. 8. 5. 22:09

서버에 업로드하여 존재하는 파일을 응답하는 방법이다.

 

먼저 이미지 출력은 <img> 태그를 사용한다.

<img th:each="imgFile : ${poster.imgFiles}" th:src="|/images/${imgFile.getStoreFileName()}|" width="200" height="200">

 


이제 요청에 맞춰 서버에서 파일을 응답해보자.

아래의 방법으로 간단히 이미지 파일을 응답하여 출력이 가능하다.

@ResponseBody
@GetMapping("/images/{filename}")
public Resource downloadImage(@PathVariable String filename) throws MalformedURLException {
    return new UrlResource("file:" + fileStore.getFullPath(filename));
}

 

그러나 이 방법은 컨텐츠 헤더를 제대로 작성하지 않고 대충 던져도

웹 브라우저가 똑똑해서 알아서 컨텐츠 타입을 처리해서 보여주긴하나 타입을 지정해서 뿌려주자.

 

@GetMapping("/images/{filename}")
public ResponseEntity<Resource> downloadImage(@PathVariable String filename) throws IOException {
    UrlResource resource = new UrlResource("file:" + fileStore.getFullPath(filename));
    return ResponseEntity.ok()
        .header(HttpHeaders.CONTENT_TYPE, Files.probeContentType(resource.getFile().toPath()))
        .body(resource);
}
//System.out.println(Files.probeContentType(resource.getFile().toPath()));

Files.probeContentType(Path path)를 사용하여 파일의 컨텐츠 타입을 가져올 수 있다.

fullPath는 다음과 같다. /Users/lsm/Desktop/imgFolder/7b0bd15b-664a-4e0a-a2fd-3db86bf4bed7.gif

 

컨텐츠 타입까지 지정해주지 않고 POSTMAN으로 GET요청시 

 

컨텐츠 타입 지정 후

 

 

 

동작 결과

Comments