쌓고 쌓다

Resource, UrlResource? 본문

프로그래밍/spring

Resource, UrlResource?

승민아 2024. 1. 2. 16:21

 

만들고 있는 앱에서 서버로 "http://10.0.2.2:8080/inquirys/imagefile/b26295a2-6e46-49c9-9cf9-173fb8ad4a2b.jpg"와 같이

요청이 오면 이미지 파일을 응답으로 보내길 원했다.

 

그래서 다음과 같은 코드를 작성했다.

@GetMapping("/imagefile/{imagefileName}")
public ResponseEntity<Resource> getImagefile(@PathVariable String imagefileName) throws IOException {
    UrlResource resource = new UrlResource("file:" + imageStore.getFullPath(imagefileName));
    return ResponseEntity.ok()
        .header(HttpHeaders.CONTENT_TYPE, Files.probeContentType(resource.getFile().toPath()))
        .body(resource);
}


Resource는 뭐고 UrlResource는 뭔지 스프링에서는 어떻게 처리해주는지 궁금해졌다.

 

 

Resource

스프링 개발을하며 외부 리소스(파일)을 필요로하는 경우가 있다.

스프링에서 리소스에 접근하기위해 Resource 인터페이스로 추상화를 해두었다.

 

Resource 인터페이스

Resource는 InputStreamSource를 상속 받고 있는데

InputStreamSource는 다음과 같이 InputStream을 받아 Byte 배열을 받을 수 있다.

 

InputStreamSource

 

 

UrlResource

스프링에서 Resource 구현체로 다양한걸 제공하지만 내가 만난 UrlResouce만 알아보자.

UrlResource는 URL 상의 리소스를 다루기 위한 클래스이다. (https://docs.spring.io/spring-framework/reference/core/resources.html#resources-implementations-urlresource)

 

 

file: for accessing filesystem paths,

 

UrlResource resource = new UrlResource("file:" + imageStore.getFullPath(imagefileName));
// imageStore.getFullPath : /Users/lsm/Desktop/appImgFolder/b26295a2-6e46-49c9-9cf9-173fb8ad4a2b.jpg

생성자로 경로를 넣어줄때 접두사 "file:"를 꼭 넣어주어야한다.

 

 

.header(HttpHeaders.CONTENT_TYPE, Files.probeContentType(resource.getFile().toPath()))

 

Files.probeContentType을 사용하여 헤더 Content-Type을 지정해줄 수 있다.

 

 

Comments