-
Spring MVC(MultipartFile와ResponseEntity)웹개발/Spring 2020. 7. 30. 19:59
이 내용은 인프런의 스프링 웹 MVC강좌를 참고하여 만들었습니다.
- 파일 업로드시 사용한다
- MultipartResolver빈이 설정이 되어 있어야 사용이 가능(스프링 부트가 자동적으로 설정)
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>File Upload</title> </head> <body> <div th:if = "${message}"> <h2 th:text="${message}"/> </div> <form method="POST" enctype="multipart/form-data" action="#" th:action="@{/file}"> File: <input type="file" name="file"/> <input type="submit" value="Upload"/> </form> </body> </html>
해당 html파일은 multipart/form-data타입으로 요청을 보내줌
<dependency> <groupId>org.apache.tika</groupId> <artifactId>tika-core</artifactId> <version>1.24.1</version> </dependency>
@Controller public class FileController { @Autowired private ResourceLoader resourceLoader; @PostMapping("/file") public String fileUpload(@RequestParam MultipartFile file, RedirectAttributes attributes){ //save System.out.println("file name : " +file.getName()); System.out.println("file origin name : " +file.getOriginalFilename()); String message = file.getOriginalFilename() + "is uploaded"; attributes.addFlashAttribute("message",message); return "redirect:/file"; } @GetMapping("/file") public String fileUploadFrom(Model model){ return "files/index"; } @GetMapping("/file/{filename}") @ResponseBody public ResponseEntity<Resource> downloadFile(@PathVariable String filename) throws IOException { Resource resource = resourceLoader.getResource("classpath:" + filename); File file = resource.getFile(); Tika tika = new Tika(); String mediaType = tika.detect(file); return ResponseEntity.ok() .header(HttpHeaders.CONTENT_DISPOSITION, "attachement; filename=\"" + resource.getFilename() + "\"") .header(HttpHeaders.CONTENT_TYPE,mediaType) .header(HttpHeaders.CONTENT_LENGTH,file.length() + "") .body(resource) ; } }
-컨트롤러에서 @RequestParam으로 파라미터를 받아와 파일을 처리 할 수 있다.
-다운로드 부분에서는 리턴값을 ResponseEntity를 이용하여 요청의 헤더와 Body안에 리소스를 첨가하여 반환 할 수 있다.
-미디어 타입을 헤더 부분에 첨가하기 위하여 Tika라는 의존성을 설치하여 타입을 알아내고 헤더에 첨가 할 수 있다.
-ResponseEntity같은 경우에는 @ResponseBody어노테이션 생략이 가능하다.
'웹개발 > Spring' 카테고리의 다른 글
Spring MVC(@RequestBody, HttpEntity, @ResponseBody, ResponseEntity) (0) 2020.07.30 Spring MVC(RedirectAttribute) (0) 2020.07.30 Spring MVC(세션 관리) (0) 2020.07.28 Spring MVC(폼 서블릿 오류 해결) (0) 2020.07.28 Spring MVC(@ModelAttribute, @Valid, @Validated) (0) 2020.07.28