반응형
MultipartFile
파일 업로드를 할때 사용하는 핸들러 메소드 argument
Spring MVC의 경우에는 MultipartResolver 빈이 설정되어있어야한다.
// example MultipartResolver bean @Bean(name = "multipartResolver") public CommonsMultipartResolver multipartResolver() { CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(); multipartResolver.setMaxUploadSize(100000); return multipartResolver; }
Spring Boot에서는 자동으로 설정이 된다. => 따라서 properties에서 최대 요청 가능 용량같은 옵션을 설정할 수 있다.
POST요청을 보낼 때
enctype="multipart/form-data"
가 있어야 파일을 참조할 수 있다.List
을 사용해 여러 파일을 참조할 수 있다.
파일 업로드 구현
파일 업로드 form 만들기
files/index.html
<form method="POST" enctype="multipart/form-data" action="#" th:action="@{/file}"> File: <input type="file" name="file"/> <input type="submit" value="Upload"/> </form>
FileController.java
@Controller public class FileController { @GetMapping("/file") public String fileUploadForm() { return "files/index"; } }
POST로 오는 파일 업로드 요청 처리하기
FileController.java
@Controller public class FileController { @GetMapping("/file") public String fileUploadForm() { return "files/index"; } @PostMapping("/file") public String fileUpload(@RequestParam MultipartFile file, RedirectAttributes attributes) { // save... System.out.println(file.getName()); // getName : html에서 넘어오는 name ('file') System.out.println(file.getOriginalFilename()); // getOriginalFilename : 원래 파일명 String message = file.getOriginalFilename() + " is uploaded"; // 파일 업로드가 되었다는 message를 'files/index.html'에서 띄워준다. attributes.addFlashAttribute("message", message); return "redirect:/file"; } }
message
를 뛰우기 위한 html 코드
<div th:if="${message}"> <h2 th:text="${message}"/> </div>
Test 코드 만들기
@RunWith(SpringRunner.class) @SpringBootTest @AutoConfigureMockMvc public class FileControllerTest { @Autowired private MockMvc mockMvc; @Test public void fileUploadTest () throws Exception { MockMultipartFile file = new MockMultipartFile("file", "test.txt", "text/plain", "hello file".getBytes()); // 인자값 : 넘겨줄때의 파일 이름, 원래 파일 이름, 파일 타입, 파일 데이터 this.mockMvc.perform(multipart("/file").file(file)) .andDo(print()) .andExpect(status().is3xxRedirection()); } }
반응형
'Web > Spring' 카테고리의 다른 글
[Spring MVC] @RequestBody와 HttpEntity 사용하기 (0) | 2020.01.23 |
---|---|
[Spring MVC] ResponseEntity를 사용해서 파일 다운로드 구현 (0) | 2020.01.23 |
[Spring MVC] FlashAttribute 사용하기 (0) | 2020.01.21 |
[Spring MVC] RedirectAttributes 사용하기 (0) | 2020.01.21 |
[Spring MVC] @SessionAttribute 사용하기 ('s'가 안 붙은건 안 비밀) (0) | 2020.01.21 |