-
핸들러 메소드 14부 ResponseEntity 예제:) 다운로드SPRING/스프링 MVC 2021. 7. 10. 01:58
파일 리소스를 읽어오는 방법
- 스프링 ResourceLoader 사용하기
파일 다운로드 응답 헤더에 설정할 내용
- Content-Disposition: 사용자가 해당 파일을 받을 때 사용할 파일 이름
- Content-Type: 어떤 파일인가
- Content-Length: 얼마나 큰 파일인가
파일의 종류(미디어 타입) 알아내는 방법
<dependency> <groupId>org.apache.tika</groupId> <artifactId>tika-core</artifactId> <version>1.26</version> </dependency>
ResponseEntity
- 응답 상태 코드
- 응답 헤더
- 응답 본문
파일 다운로드 로직
@Controller public class FileController { @Autowired private ResourceLoader resourceLoader; @GetMapping("/file") public String fileUploadForm() { return "files/index"; } @PostMapping("/file") public String fileUpload(@RequestParam MultipartFile file, RedirectAttributes attributes) { // Save 로직 String message = file.getOriginalFilename() +" is uploaded"; attributes.addFlashAttribute("message", message); return "redirect:/file"; } // 다운로드 @GetMapping("/file/{filename}") @ResponseBody public ResponseEntity<Resource> downloadFile(@PathVariable String filename) throws IOException { // 위치 resources 디렉터리에 있는 test.jpg 파일 Resource resource = resourceLoader.getResource("classpath:" + filename); File file = resource.getFile(); Tika tika = new Tika(); String type = tika.detect(file); return ResponseEntity.ok() .header(HttpHeaders.CONTENT_DISPOSITION, "attachement; filename=\"" + resource.getFilename() + "\"") .header(HttpHeaders.CONTENT_TYPE, type) .header(HttpHeaders.CONTENT_LENGTH, String.valueOf(file.length())) .body(resource); } }
test.jpg 파일 위치
resources 폴더 내의 하위디렉토리를 접급하고 싶다면, 아래와 같이 classpath를 수정하면 된다.
(files 디렉토리 내에 있는파일)
Resource resource = resourceLoader.getResource("classpath:\\files\\" + filename);
'SPRING > 스프링 MVC' 카테고리의 다른 글
핸들러 메소드 16부 - @ResponseBody & ResponseEntity (0) 2021.07.10 핸들러 메소드 15부: @RequestBody & HttpEntity (0) 2021.07.10 핸들러 메소드 13부: MultipartFile (0) 2021.07.09 핸들러 메소드 12부 - FlashAttributes (0) 2021.07.09 핸들러 메소드 11부 RedirectAttributes (0) 2021.07.08