Web/팁

[Java] File to MultipartFile (import 포함)

 

 

다크모드로 보시는걸 추천드립니다.

 

 

 

 

 

 

스프링에서 파일업로드를  구현할때 테스트 코드를 작성하려면 File을 읽어와서 MultiPartFile로 변환해주어야 합니다.

 

변환하는 코드는 인터넷에 많지만 어떤것을 import하는지 아무리 찾아봐도 나오지 않아서 제가 직접 찾아가며 구현했습니다.

 

 

File 을 MultiparFile로 변환하는 코드를 사용하기 위해서는 2가지가 만족되어야 합니다.

 

  1. (gradle(혹은 maven) fileupload, io)  dependency 추가
  2. 제대로된 (FileItem, DiskFileItem, IOUtils) import

 

 

gradle dependency 추가하기

 

맨 아래 두개를 꼭 추가해주어야 합니다. 그래야 import가 잘 동작합니다.

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6'
	implementation 'org.springframework.boot:spring-boot-starter-validation'
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
	implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect'
	compileOnly 'org.projectlombok:lombok'
	runtimeOnly 'com.h2database:h2'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	compile group: 'commons-fileupload', name: 'commons-fileupload', version: '1.4'
	compile group: 'commons-io', name: 'commons-io', version: '2.4'
}

 

 

 

 

제대로된 import와 코드

dependency를 제대로 걸었으면 아래 임포트문이 제대로 동작합니다.

 

file -> multipartfile로 변환하는 과정은 file을 가져오는 path만 수정해주시면 됩니다.

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItem;
import java.io.FileInputStream;
import java.io.File;
import java.io.OutputStream;
import org.apache.commons.io.IOUtils;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;



... 생략 ...


    private MultipartFile getMultipartFile() throws IOException {
        File file = new File(new File("").getAbsolutePath() + "/src/main/resources/static/images/jpa.png");
        FileItem fileItem = new DiskFileItem("originFile", Files.probeContentType(file.toPath()), false, file.getName(), (int) file.length(), file.getParentFile());

        try {
            InputStream input = new FileInputStream(file);
            OutputStream os = fileItem.getOutputStream();
            IOUtils.copy(input, os);
            // Or faster..
            // IOUtils.copy(new FileInputStream(file), fileItem.getOutputStream());
        } catch (IOException ex) {
            // do something.
        }

        //jpa.png -> multipart 변환
        MultipartFile mFile = new CommonsMultipartFile(fileItem);
        return mFile;
    }

 

 

 

다들 이 해결방법으로 시간 아끼시길 바랍니다