SpringBoot

[SpringBoot] MultipartFile을 사용한 업로드 파일 저장 구현

joheamin 2025. 4. 25. 00:07

 

업로드 파일?

 

우리가 이미지 파일등을 업로드 하게 되면 단순히 파일명 (basic.jpg) 가 저장되는 것이 아닌 원본 파일 그 자체가 

File이라는 객체의 형태로 담기게된다.

 

이때 업로드를 할 File을 MultipartFile에 저장한 뒤 다양한 메서드를 통해 저장을하고 관리를한다.

 

❓ MultipartFile

스프링부트에서 파일 업로드를 처리할 때 사용되는 여러 편리한 메서드를 제공하는 인터페이스이다.

주로 form에서 multipart/form-data 를 통해 파싱된 파일 데이터를 처리하게된다.

 

🌟MultipartFile 의 메서드 종류

 

 

getName() : 파라미터 이름의 속성 값 

<form action="" name="hello"></form>

 

 

◾ getOriginalFileName() : 업로ㄷ된 파일의 원래 이름      ⭐ 

 

 

◾ isEmpty() : 파일이 비어있는지 확인한다.                ⭐ 

 

◾ getSize() : 파일의 크기를 byte단위로 확인

 

◾ getBytes() : 파일 데이터를 바이트 배열로 반환한다.

 

◾ transferTo(File file) : 파일을 지정한 위치로 저장      ⭐ 

                                       File에 경로를 지정한 뒤 transferTo로 실제 저장

 


 

🔍 파일 저장 구현하기

 

⬛ View

◾ form을 통해 File 전달
<form action="/upload" method="post" enctype="multipart/form-data">
        <input type="file" name="uploadImage" />
        <input type="submit" />
</form>​


👉 form의 enctype 속성은 파일을 업로드 할 때 반드시 사용해야하는 속성이다.
      form 데이터를 서버로 전송할 때 어떤 형식으로 인코딩할지를 정하는 속성으로써 
      
      multipart/form-data 는 파일을 포함하는 form데이터를 전송할 때 사용된다.
      즉 타입이 File인 input이 있는 경우 반드시 속성을 지정한다.

 

 

⬛ Controller

요청 URL 메서드 생성
@PostMapping("/upload")
public void uploadImage(@RequestParam("file") MultipartFile file,HttpServletRequest request){
	
}

👉  form으로부터 넘어오는 하나의 file 값을 @RequestParam을 통해 MultipartFile 타입으로 가져온다.
       실제 저장경로를 구할 request 객체도 가져온다.


업로드 파일 유무 검사 후 실제로 저장

 if(!file.isEmpty()&& file != null){
            //실제 저장 경로
            String realPath = request..getServletContext().getRealPath("/");
            
            
            // 저장할 경로를 추가로 더 붙인 다음 업로드할 파일명을 붙인다.
            realPath += "\\resource\\uploadImages\\" + file.getOriginalFilename();
            
            //transferTo로 실제 저장
            profileImagef.transferTo(new File(realPath));
    }

👉 만약 pig.png 파일을 선택 할 경우 

C:\\Dev\\tools\\java\\src\\heamin01\\src\\main\\resources\\webapp\\resources\\uploadImages\\pig.png

👉 해당 위치에 pig가 담기게된다.

 

그 후 나머지 DTO 와 DB에 저장될 파일 컬럼에는 

file.getOriginalFilename() 을 통해 파일이름을 저장하도록 한다.