파일
파일 업로드는 일반적으로 웹 애플리케이션에서 사용자가 파일을 서버에 전송하는 기능을 말한다.
스프링 부트에서 파일 업로드 관련하여 자동으로 처리해주는 기능은 일반적으로 다음과 같다.
- 파일 크기 제한 설정
스프링 부트는 파일 업로드 시 파일 크기를 제한할 수 있는 설정을 자동으로 지원한다.
기본적으로 제한 크기를 설정하지 않으면 기본 값으로 최대 허용 크기가 적용된다.
- 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 요소에 적용되며, 사용자가 여러 개의 파일을 선택할 수 있도록 허용한다.