스프링 부트(Spring Boot) - 파일

2경빈·2024년 6월 20일

Spring Boot

목록 보기
9/19

파일

파일 업로드는 일반적으로 웹 애플리케이션에서 사용자가 파일을 서버에 전송하는 기능을 말한다.
스프링 부트에서 파일 업로드 관련하여 자동으로 처리해주는 기능은 일반적으로 다음과 같다.

  • 파일 크기 제한 설정

스프링 부트는 파일 업로드 시 파일 크기를 제한할 수 있는 설정을 자동으로 지원한다.
기본적으로 제한 크기를 설정하지 않으면 기본 값으로 최대 허용 크기가 적용된다.

  • MultipartFile 처리

스프링에서 제공하는 MultipartFile 인터페이스를 통해 파일 업로드를 처리할 수 있다.
이 인터페이스는 멀티파트 요청에서 업로드된 파일을 추상화하고, 쉽게 다룰 수 있도록 도와준다.

  • 업로드된 파일 저장

스프링 부트는 업로드된 파일을 특정 경로에 자동으로 저장하는 기능을 제공하지는 않는다.
이는 개발자가 원하는 방식으로 파일 저장 로직을 구현해야 한다.

  • 유효성 검사

업로드된 파일의 유효성 검사, 예를 들어 파일의 MIME 타입 검사나 확장자 체크 등을 수동으로 구현해야 한다.

코드(파일 가져오기) :

//Controller
@PostMapping("insert")
public void insert(BoardVo vo) throws IOException {
    System.out.println("vo = " + vo);
    List<MultipartFile> attachmentList = vo.getAttachmentList();
    for(MultipartFile att : attachmentList){
        System.out.println("att = " + att);
    }
}

//Vo
@Data
public class BoardVo {
    private String no;
    private String title;
    private String content;
    private List<MultipartFile> attachmentList; //List를 통해 여러개의 파일 저장
}

//jsp
<h1>게시글 작성</h1>
<form action = "/board/insert" method="POST" enctype ="multipart/form-data">
	제목 : <input type = "text" name = "title">
	<br />
	내용 : <input type = "text" name = "content">
	<br />
	파일 : <input type = "file" name = "attachmentList" multiple accept=".png">
	<input type = "submit" value = "제출">
</form>

*enctype="multipart/form-data"는 HTML 폼 요소의 속성 중 하나로, 웹 페이지에서 파일을 서버로 전송할 때 사용된다.

enctype 사용의 이유

  • 파일 전송 지원

HTTP 프로토콜은 기본적으로 텍스트 데이터만을 전송할 수 있다.
그러나 파일은 이진 데이터로 이루어져 있기 때문에 추가적인 처리가 필요하다. enctype="multipart/form-data"를 사용하면 파일 업로드와 관련된 여러 가지 데이터를 함께 전송할 수 있다.

  • 멀티파트 요청

파일을 포함한 멀티파트 요청을 서버로 보내기 위해 필요하다.
이러한 요청은 하나 이상의 파일을 포함할 수 있으며, 각 파일은 별도의 데이터 파트로 전송된다.

  • 파일의 메타데이터 포함

파일을 업로드할 때 파일 자체 외에도 파일의 이름, 크기, 유형 등의 메타데이터를 함께 전송할 수 있다. 이는 서버에서 파일을 처리할 때 유용하다.

따라서 파일을 포함한 데이터를 서버로 안전하게 전송하려면, HTML 폼 요소에서 enctype="multipart/form-data"를 설정해야 한다.
이 설정이 없으면 파일이나 바이너리 데이터가 제대로 서버로 전송되지 않을 수 있다.

*multiple은 HTML input 요소에서 사용되는 속성 중 하나이다.
주로 파일 업로드를 위한 input 요소에 적용되며, 사용자가 여러 개의 파일을 선택할 수 있도록 허용한다.

profile
eggs before hatching

0개의 댓글