SpringBoot

[Springboot] URL로 이미지 다운로드

simba 2020. 12. 23. 00:54

URL을 통해 이미지를 다운로드 해보자

 

1. ExampleController

1: @ApiOperation(value = "이미지 다운로드")
2: @GetMapping(value = "/download/image")
3: public ResponseEntity<Resource> downloadImage(
4:        @ApiParam(value = "다운받을 이미지 URL", required = true) String url) {
5:             return exampleFacade.downloadImage(url);
6:       }

 

1 스웨거에 표시

2 GetMapping을 사용 (Post,Get,Put,Delete Mapping등은 후에 포스팅하겠습니다)

 

 

2. ExampleFacade

@Autowired
ResourceLoader resourceLoader;

1: public ResponseEntity<Resource> downloadImage(String url) {
2:     String imageUrl = url
3:     Resource resource = resourceLoader.getResource(imageUrl);
4:     HttpHeaders headers = new HttpHeaders();
5:     headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + “image.png");
6:     return new ResponseEntity<>(resource, headers, HttpStatus.OK);
7: }

1 return은 ResponseEntity<Resource> 로 리소스를 리턴하는 형식으로

3 getResource()를 리소스 객체를 반환받고

4,5 등을 통해 ReponseEntity 의 Header를 정의한다

 

 

Resource 추상화 (org.springframework.core.io.Resource)

스프링 내부에서 많이 사용하는 인터페이스로, java.net.URL을 추상화한 인터페이스이다. 

리소스를 읽어오는 기능을 Resource 를 통해 한 이유는 

 

클래스 패스 기준으로 리소스를 읽어오는 기능의 부재와,

새로운 핸들러를 만들어 사용하는것이 복잡하며 ServeltContext를 기준으로 상대 경로를 읽어오는 기능이 없다.

 

ResourceLoader란 무엇인가

- 리소스를 읽어오는 기능을 제공하는 인터페이스이다

 

1. 파일 시스템에서 읽어오기

FileSystemResource

2. 클래스패스에서 읽어오기 

지원하는 접두어가 classpath: 일 때, 이를 기준으로 리소스를 읽어들인다.

3. URL로 읽어오기

4. 상대/절대 경로로 읽어오기