파일 업로드가 필요할때 @RequestPart('image') MultipartFile file
이런 식으로 어노테이션을 사용하거나 해서 파일업로드를 구현했었는데 더 저수준으로도 작성해보고 싶은 생각이들었다.
코드
@PostMapping("/file-upload")
public void fileUpload(HttpServletRequest request) throws IOException, ServletException {
Part image = request.getPart("image");
InputStream inputStream = image.getInputStream();
// 파일 확장자 구하기
String fileName = image.getSubmittedFileName();
String[] split = fileName.split("\\.");
String suffix = split[split.length - 1];
// 임시파일 생성
File tempFile = new File("./temp." + suffix);
tempFile.deleteOnExit();
// 생성된 임시파일에 요청으로 넘어온 file의 inputStream 복사
try (FileOutputStream outputStream = new FileOutputStream(tempFile)) {
int read;
byte[] bytes = new byte[1024];
while ((read = inputStream.read(bytes)) != -1) {
outputStream.write(bytes, 0, read);
}
}
}
요청
curl -F "image=@/Users/ljs/Desktop/스크린샷 2022-10-31 오전 8.28.09.png"
설명
Part image = request.getPart('image')
로 파일이 보내질때의 필드로 파일정보를 가져온다. 디버깅을 해보면 아래와 같이 ApplicationPart에 담는다는 걸 알수있다.
new File("./temp." + suffix)
로 임시 파일을 생성하고 FileOutputStream
을 사용해 생성 된 임시파일에 현재 파일의 inputStream을 복사한다
temp.png 파일이 생성되었고
제대로 파일이 생성된것을 확인할 수 있었다!
핵 유 용