Java/Spring Boot

Spring boot RestAPI 파일 다운로드

요술공주밍키 2023. 2. 10. 09:46

Controller

로컬(서버)에서 가지고 있는 이미지를 클라이언트가 다운로드 받을 수 있도록 컨트롤러를 먼저 구현한다.

/**
 * 이미지 다운로드
 * @param elementId
 * @return
 */
@GetMapping("/imageDownload")
public ResponseEntity<Object> imageDownload(@RequestParam String elementId) {
    File file = new File("C:/Temp/ECM/" + elementId + ".tif");
    String path = "C:/Temp/ECM/";

	// 이 부분은 ECM 엔진에서 이미지를 다운로드 받는 별도의
    // 로직을 구현해뒀음
    if(file.exists()) {
        path = path + elementId + ".tif";
    } else {
        DownloadContent dc = new DownloadContent();
        String result = dc.download(elementId);
        path = path + result + ".tif";
        dc.discon();
    }

	// 이 부분이 다운로드 로직
    return service.imageDownload(path);
}

분기문에 들어가 있는 내용은 따로 작성해 둔 이미지를 다운로드 받는 로직이다.

이미지 혹은 파일을 꺼내기만 하면 되는 케이스라면 없어도 된다.

 

ServiceImpl

@Override
public ResponseEntity<Object> imageDownload(String fileName) {
    try {
        Path filePath = Paths.get(fileName);
        Resource resource = new InputStreamResource(Files.newInputStream(filePath));

        File file = new File(fileName);

        HttpHeaders headers = new HttpHeaders();
        headers.setContentDisposition(ContentDisposition.builder("attachment").filename(file.getName()).build());

        return new ResponseEntity<Object>(resource, headers, HttpStatus.OK);
    } catch(Exception e) {
        log.info("ImageServiceImpl 에러 내용, message={}", e.getMessage(), e);
        return new ResponseEntity<Object>(null, HttpStatus.CONFLICT);
    }
}

해당 부분이 실질적인 이미지 다운로드 로직이 되겠다.

 

참고로 예외를 Exception <- 이렇게 통으로 잡는 것은 좋지 않다!