java, spring

[Spring Framework] 스프링 파일 업로드 Java config

isaac.kim 2021. 5. 29. 19:18
728x90
반응형

[Spring Framework] 스프링 파일 업로드 Java config

 

도움이 되셨다면 광고 한 번 클릭 부탁드립니다. 한 번의 클릭이 제게 큰 힘이 된답니다!^^

 

이전 글에서 xml 파일로 fileupload 설정을 하고, 파일 업로드를 진행했습니다.

 

지난 글

https://lifere.tistory.com/123

 

[Spring framework] fileupload, 스프링 파일 업로드

[Spring framework] fileupload, 스프링 파일 업로드 Spring에서 파일 업로드하는 방법에 대해 알아보겠습니다. Servlet 3.0 전까지는 commons의 파일 업로드를 이용하거나 cos.jar 등을 이용했습니다. Serv..

lifere.tistory.com

 

반응형

 

이번 글에서는 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";
	}

다음은 파일을 업로드해보겠습니다. 이전 글과 같이 예제 파일이나 저장되는 경로는 같습니다.

 

제출을 눌러서 결과를 보겠습니다.

 

위 이미지 로그에서 보이듯이 파일은 서버로 넘겨졌습니다.

 

실제 폴더에도 파일이 업로드되었고, 보낸 파일과 같은 파일이 업로드된 것을 확인할 수 있었습니다.

 

재미있는 점은 이전 예제와 이번 예제에서 파일을 처리하는 메서드 부분의 소스코드가 조금 다른 부분이 있습니다. 한번 점검해보시기 바랍니다.

 


도움이 되셨다면 광고 한 번 클릭 부탁드립니다. 한 번의 클릭이 제게 큰 힘이 된답니다!^^

 

728x90
반응형