Spring에서는 클라이언트가 업로드한 File을 핸들러에서 손쉽게 다룰 수 있도록 MultipartFile 인터페이스를 제공합니다.
이렇게 업로드된 파일은 저장 또는 다른 처리를 위해 MultipartFile <-> File 서로 간의 변환이 종종 필요한데요.
이어지는 내용을 통해서 MultipartFile과 File의 차이점 및 변환 방법을 살펴보겠습니다.
MultipartFile
MultipartFile interface는 Spring에서 업로드된 파일을 다룰 때 사용되는 인터페이스로 파일의 이름과 실제 데이터, 파일 크기 등을 구할 수 있습니다.
/*
Spring에서 MultipartFile 타입을 매개변수로 사용하기 위해서는 MultipartResolver 구현체가 Bean으로 등록되어 있어야 하는데요. Spring Boot에서는 MultipartAutoConfiguration 클래스에서 StandardServletMultipartResolver가 @ConditionalOnMissingBean 어노테이션으로 인해 기본적으로 Bean 등록이 되기 때문에 커스텀이 필요한 경우가 아니라면 따로 등록할 필요가 없습니다.
*/
File
File 클래스는 java.io 패키지에 포함되며, 입출력에 필요한 파일이나 디렉터리를 제어하는 데 사용되는데요.
파일과 디렉터리의 접근 권한, 생성된 시간, 경로 등의 정보를 얻을 수 있는 메서드가 있으며, 새로운 파일 및 디렉터리 생성, 삭제 등 다양한 조작 메서드를 가지고 있습니다.
MultipartFile to File
public File multipartFileToFile(MultipartFile multipartFile) throws IOException {
File file = new File(multipartFile.getOriginalFilename());
multipartFile.transferTo(file);
return file;
}
File To MultipartFile
//File 인스턴스를 생성할 때 매개변수는 파일을 포함한 파일의 경로
File file = new File("C:\\temp\\test.jpg");
FileItem fileItem = new DiskFileItem("file", Files.probeContentType(file.toPath()), false, file.getName(), (int) file.length(), file.getParentFile());
InputStream inputStream = new FileInputStream(file);
OutputStream outputStream = fileItem.getOutputStream();
IOUtils.copy(inputStream, outputStream);
// or IOUtils.copy(new FileInputStream(file), fileItem.getOutputStream());
MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
(MockMultipartFile을 사용하는 방법도 있지만 테스트에 사용되는 객체인 만큼 위 방법이 더 적절하지 않을까 생각됩니다.)
'Programming > Spring Boot' 카테고리의 다른 글
(Spring Boot) flyway 데이터 마이그레이션 설정 방법 (0) | 2022.12.04 |
---|---|
스프링부트 spring-security-web을 사용한 IP 접근제어 (0) | 2022.11.02 |
Spring Boot + GraphQL 기본적인 사용법 정리 (0) | 2022.10.11 |
Spring Boot 부트스트랩(bootstrap) 템플릿 적용하는 방법 (0) | 2022.10.05 |
Spring Boot Multi Module Project 생성하기(maven) (0) | 2022.09.29 |