728x90
파일 업로드 컨트롤러 생성
@Controller
@Slf4j
public class FileUploadController {
public static final Path path = Paths.get(System.getProperty("user.home"), ".upload");
@GetMapping("/form")
public String form() {
return "form";
}
@PostMapping("/upload")
public String upload(@RequestParam("file") MultipartFile multipartFile) {
log.info("upload");
File targetFile = new File(path.resolve(multipartFile.getOriginalFilename()).toString());
try {
InputStream fileStream = multipartFile.getInputStream();
FileUtils.copyInputStreamToFile(fileStream, targetFile);
} catch (IOException e) {
FileUtils.deleteQuietly(targetFile);
log.error("Failed to upload ", e);
}
return "redirect:/form";
}
}
파일 업로드 폼
<!DOCTYPE HTML>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>File Upload</title>
</head>
<body>
<div>
<h1>파일 업로드 예제</h1>
<form th:action="@{/upload}" method="post" enctype="multipart/form-data">
<input type="file" value="파일 선택" name="file"/>
<input type="submit" value="업로드" />
</form>
</div>
</body>
</html>
MultipartConfigElement 클래스
Spring Boot는 자동으로 MultipartConfigElement 클래스를 빈으로 등록해준다. 그리고 파일 업로드시 사용하는 옵션 maxFileSize, maxRequestSize 기본값은 -1로 제한 없음으로 되어 있다.
옵션
- location : 파일 업로드 할 때 사용하는 임시 저장하는 경로
- maxFileSize : 파일당 최대 파일 크기
- maxRequestSize : 파일 한 개의 용량이 아니라 요청당 최대 파일 크기
- fileSizeThreshold : 임시 파일을 만드는 기준, 메모리에서 바로 스트림으로 전달되는 크기
업로드 옵션 값 설정
application.properties 파일에 업로드 관련 옵션 값을 설정할 수 있다. 단위 크기는 KB, MB 등 숫자와 문자열을 함께 쓸 수 있다. 예를 들어, 128KB 값을 설정하면 DataSize
클래스가 해석해서 값을 변환한다.
spring.servlet.multipart.max-file-size=128KB
spring.servlet.multipart.max-request-size=128KB
참고자료
'Spring' 카테고리의 다른 글
스프링 부트와 JPA 활용1,2 인프런 강의 정리 (0) | 2020.01.20 |
---|---|
Spring Security 인프런 강의 정리 (2) | 2019.09.05 |
ServletContextListener 이벤트 처리 (0) | 2019.07.26 |
스프링에서 Exception 핸들러 매핑하기 (0) | 2019.07.25 |
Thymeleaf 템플릿 엔진에서 로케일 텍스트 메시지 처리 (0) | 2019.07.25 |
댓글