반응형
ResponseEntity
ResponseEntity
는 View를 제공하지 않는 형태로 요청을 처리하고, 직접 결과 데이터 및 Http 상태 코드를 설정하여 응답을 할 수 있다. 이번 글에서는 이를 활용해서 파일 다운로드를 구현해보겠다.
ResourceLoader 사용
우선 다운로드 할 수 있게끔하려는 파일을 코드상에서 읽어와야한다. (이때 파일은 프로젝트의
resources
폴더에 넣어 주었다.) 여기서는 ResourceLoader를 사용하여 리소스를 읽어와서 다운로드가 가능하게끔 만들겠다.Resource resource = resourceLoader.getResource("classpath:" + filename);
resource를 File로 저장하기
뒤에서 나올 내용이지만 해당 파일의 길이를 헤더에 지정해주기 위해서 resource를 File로 읽어 저장해준다.
File file = resource.getFile()
ResponseEntity 사용하기
ResponseEntity를 사용하기 위해서는 응답 상태 코드, 응답 헤더, 응답 본문을 설정해주어야한다.
@GetMapping("/file/{filename}") public ResponseEntity<Resource> fileDownload(@PathVariable String filename) throws IOException { Resource resource = resourceLoader.getResource("classpath:" + filename); File file = resource.getFile(); // 파일의 mediaType를 알아내기 위한 api Tika tika = new Tika(); String mediaType = tika.detect(file); return ResponseEntity.ok() // ok 200 상태코드 설정 .header(HttpHeaders.CONTENT_DISPOSITION, "attachement;filename=\"" + resource.getFilename() + "\"") // 파일이 다운로드 되어 저장될 이름 .header(HttpHeaders.CONTENT_TYPE, mediaType) // 파일의 타입 .header(HttpHeaders.CONTENT_LENGTH, file.length() + "") // 파일의 크기 .body(resource); // 응답 본문 }
- ResponseEntity에서
.
으로 이어가며 응답 상태코드, 헤더, 본문을 설정해준다. - 위에서 Tika를 사용하였는데 mediaType를 알아내기 위한 api이다.
- 이를 사용하려면 Apache Tika Core를 dependency로 추가를 해주어야한다.
- ResponseEntity에서
서버 실행 후 파일 다운로드 요청 보내보기
- 위와 같이 요청을 보내면 파일이 다운로드 된다. 단, test.jpeg라는 파일이 resources폴더에 존재해야한다.
반응형
'Web > Spring' 카테고리의 다른 글
[Spring MVC] @ResponseBody와 ResponseEntity (0) | 2020.01.24 |
---|---|
[Spring MVC] @RequestBody와 HttpEntity 사용하기 (0) | 2020.01.23 |
[Spring MVC] MultipartFile로 파일 업로드하기 (0) | 2020.01.23 |
[Spring MVC] FlashAttribute 사용하기 (0) | 2020.01.21 |
[Spring MVC] RedirectAttributes 사용하기 (0) | 2020.01.21 |