다크모드로 보시는걸 추천드립니다.
스프링에서 파일업로드를 구현할때 테스트 코드를 작성하려면 File을 읽어와서 MultiPartFile로 변환해주어야 합니다.
변환하는 코드는 인터넷에 많지만 어떤것을 import하는지 아무리 찾아봐도 나오지 않아서 제가 직접 찾아가며 구현했습니다.
File 을 MultiparFile로 변환하는 코드를 사용하기 위해서는 2가지가 만족되어야 합니다.
- (gradle(혹은 maven) fileupload, io) dependency 추가
- 제대로된 (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;
}
다들 이 해결방법으로 시간 아끼시길 바랍니다
'Web > 팁' 카테고리의 다른 글
[IntelliJ] Gradle 프로젝트 불러올때 에러해결 (3) | 2021.07.14 |
---|---|
[Spring] [IntelliJ] 정적리소스 서버 재시작없이 바로 반영하기 (0) | 2021.05.20 |
warning: CRLF will be replaced by LF in gradlew.bat. 문제해결방법 (0) | 2021.04.21 |
인텔리제이에서 커맨드라인으로 쓰던 git 중간에 연동하기 + merge conflict gui로 해결하기 (0) | 2021.04.21 |
[JPA, Lombok] @Setter 없애기 대안 (0) | 2021.04.12 |