[Spring Framework] 스프링 파일 업로드 Java config
도움이 되셨다면 광고 한 번 클릭 부탁드립니다. 한 번의 클릭이 제게 큰 힘이 된답니다!^^
이전 글에서 xml 파일로 fileupload 설정을 하고, 파일 업로드를 진행했습니다.
지난 글
https://lifere.tistory.com/123
이번 글에서는 Java로 파일 업로드를 설정하고, 스프링에서 파일을 업로드하는 방법에 대해 알아보겠습니다.
먼저 Spring legacy Project로 생성되었고, Servlet 2.5인 프로젝트로 진행된다는 점은 동일하여 commons-fileupload 라이브러리를 등록합니다.
pom.xml에 추가
다음은 '파일 업로드'를 스프링에 Java Config으로 설정합니다.
@Bean(name = "multipartResolver")
public CommonsMultipartResolver getResolver() throws IOException {
CommonsMultipartResolver resolver = new CommonsMultipartResolver();
// 10MB
resolver.setMaxUploadSize(1024 * 1024 * 10);
// 2MB
resolver.setMaxUploadSizePerFile(1024 * 1024 * 2);
// 1MB
resolver.setMaxInMemorySize(1024 * 1024);
// temp upload
resolver.setUploadTempDir(new FileSystemResource("C:\\ftmp"));
resolver.setDefaultEncoding("UTF-8");
return resolver;
}
설명은 지난 글에 작성한 내용을 가져왔습니다.
maxUploadSize는 한 번의 Request로 전달될 수 있는 최대의 크기
maxUploadSizePerFile은 하나의 파일 최대 크기
maxInMemorySize는 메모리상에서 유지하는 최대의 크기를 의미합니다.
만일 이 크기 이상의 데이터는 uploadTempDir에 임시 파일의 형태로 보관됩니다.
uploadTempDir에서 절대 경로를 이용하려면 URL형태로 제공해야 하기 때문에 'file:/'로 시작하도록 합니다.
defaultEncoding은 업로드하는 파일의 이름이 한글일 경우 깨지는 문제를 처리합니다.
★ 위 설명은 xml로 설정할 때 기준이지만 크게 다르지 않습니다. 다만 TempDir에 C:\\부터 경로를 작성합니다.
페이지를 띄우기 위해 SampleController에 메서드 추가
exUpload.jsp 파일 추가
- 지난 글에서 작성한 exUpload.jsp를 사용합니다.
form태그의 속성 method는 "POST", enctype은 "multipart/form-data", action은 "/sample/exUploadPost"로 작성합니다.
다음은 form태그에서 속성 action의 값 "/sample/exUploadPost"으로 처리될 메서드를 정의합니다.
@PostMapping("/exUploadPost")
public String exUploadPost(ArrayList<MultipartFile> files ) {
files.forEach(file -> {
log.info("---------------------");
log.info("name : " + file.getOriginalFilename());
log.info("size : " + file.getSize());
File saveFile = new File("C:\\ftmp\\storage", file.getOriginalFilename());
try {
file.transferTo(saveFile);
} catch (Exception e) {
log.info(e.getMessage());
}
});
return "redirect:/sample/exUpload";
}
다음은 파일을 업로드해보겠습니다. 이전 글과 같이 예제 파일이나 저장되는 경로는 같습니다.
제출을 눌러서 결과를 보겠습니다.
위 이미지 로그에서 보이듯이 파일은 서버로 넘겨졌습니다.
실제 폴더에도 파일이 업로드되었고, 보낸 파일과 같은 파일이 업로드된 것을 확인할 수 있었습니다.
재미있는 점은 이전 예제와 이번 예제에서 파일을 처리하는 메서드 부분의 소스코드가 조금 다른 부분이 있습니다. 한번 점검해보시기 바랍니다.
도움이 되셨다면 광고 한 번 클릭 부탁드립니다. 한 번의 클릭이 제게 큰 힘이 된답니다!^^
'java, spring' 카테고리의 다른 글
[Spring Framework] 404 에러 페이지 (0) | 2021.05.30 |
---|---|
[Spring framework] Controller의 Exception 처리 (0) | 2021.05.29 |
[Spring framework] fileupload, 스프링 파일 업로드 (0) | 2021.05.29 |
[Spring Framework] Controller의 리턴 타입 (0) | 2021.05.21 |
[Spring framework] 스프링 MVC 설정과 Controller, Model 실습 2 (0) | 2021.05.20 |