HttpServletRequest만 사용하여 간단한 파일 업로드 만들어보기

Jinseok Lee·2022년 11월 11일
2
post-thumbnail

사연

파일 업로드가 필요할때 @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 파일이 생성되었고

제대로 파일이 생성된것을 확인할 수 있었다!

profile
전 위메프, 이직준비중

1개의 댓글

comment-user-thumbnail
2022년 11월 11일

핵 유 용

답글 달기