Programming/Spring Boot

MultipartFile to File 차이점과 변환 방법(Java)

Jan92 2022. 10. 17. 23:59

MultipartFile to File

Spring에서는 클라이언트가 업로드한 File을 핸들러에서 손쉽게 다룰 수 있도록 MultipartFile 인터페이스를 제공합니다.

이렇게 업로드된 파일은 저장 또는 다른 처리를 위해 MultipartFile <-> File 서로 간의 변환이 종종 필요한데요.

이어지는 내용을 통해서 MultipartFileFile의 차이점 및 변환 방법을 살펴보겠습니다.

 

 

 

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을 사용하는 방법도 있지만 테스트에 사용되는 객체인 만큼 위 방법이 더 적절하지 않을까 생각됩니다.)