본문 바로가기
Spring

Spring 파일 업로드 구현 및 파일 크기 설정

by jayden jayden-lee 2019. 7. 26.

파일 업로드 컨트롤러 생성

@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 : 임시 파일을 만드는 기준, 메모리에서 바로 스트림으로 전달되는 크기

MultipartConfigElement 클래스

업로드 옵션 값 설정

application.properties 파일에 업로드 관련 옵션 값을 설정할 수 있다. 단위 크기는 KB, MB 등 숫자와 문자열을 함께 쓸 수 있다. 예를 들어, 128KB 값을 설정하면 DataSize 클래스가 해석해서 값을 변환한다.

spring.servlet.multipart.max-file-size=128KB
spring.servlet.multipart.max-request-size=128KB

참고자료

 

 

 

댓글0