⚡️multipart/form-data
multipart/form-data는 fom에서 사용되는 enctype 속성의 값중 하나입니다.
주로 파일이나 이미지의 업로드가 필요할 때 사용됩니다.
⚡️enctype 속성
우선 multitype에 대해 알아보기 전에 enctype 속성에 대해 알아보겠습니다.
enctype 타입은 폼 데이터를 서버로 보낼 때 해당 데이터가 인코딩 되는 방법을 명시합니다.
이 속성은 주소창에 쿼리스트링(QueryString)을 더하는 GET 방식에는 사용이 불가능하고,
오직 form의 메소드가 POST 방식이어야만 사용 가능합니다.
enctytpe 속성값으로는 다음과 같이 3가지가 존재합니다.
1) application/x-www-form-urlencoded
POST 방식을 사용할 때 enctype를 따로 지정하지 않을 때, default 값으로 설정되는 속성입니다.
모든 문자들을 서버로 보내기 전에 인코딩됨을 명시합니다.
2) text/plain
공백 문자를 "+" 기호로 변환하고, 나머지 문자는 인코딩하지 않습니다.
3) multipart/form-data
모든 문자를 인코딩하지 않습니다.
⚡️getParameter()
form에서 POST 방식으로 enctype 속성을 선언하지 않아도
GET 방식처럼 request.getParameter()를 이용해 데이터를 받아올 수 있습니다.
이는 POST 방식 사용 시 디폴트 값이 application/x-www-form-urlencoded로 설정되어
인코딩이 이루어지면서 WAS에서 스스로 인식하고 in / output 방식으로 데이터를 처리하기 때문입니다.
POST 방식으로 알아서 데이터를 처리하는 것은 좋은데 한글을 전송하고 받아보면 깨지는 현상을 발견됩니다.
주로 사용하는 UTF-8 방식이 아니라 ISO-8859-1 방식으로 인코딩이 이루어져서 그렇습니다.
이 문제는 데이터를 받는 쪽에서
request.setCharacterEncoding("UTF-8") 을 이용해 한번 더 처리해주면 간단히 해결됩니다.
그렇다면 multipart/form-data를 이용했다면 request로 데이터를 받을 수 있을까요?
정답은 불가능합니다.
form에서 이미지와 텍스트를 보낸다고 한다면 Content-type이
이미지는 image/jpeg
텍스트는 application/x-www-form-urlencoded가 되기 때문입니다.
그렇기 때문에 두 종류의 타입을 구분해줄 방법이 필요한데 이 때 MultipartRequest 객체가 사용됩니다.
⚡️MultipartRequest
1. 객체 생성
MultipartRequest multi = new MultipartRequest(
request,
savePath,
sizeLimit,
"utf-8",
new DefaultFileRenamePolicy());
객체 생성자의 파라미터는 다음과 같습니다.
파라미터 | 설명 |
request | request 객체 |
savePath | 저장될 서버의 경로 |
sizeLimit | 파일의 최대 크기 |
"utf-8" | 인코딩 방식 |
new DefaultFileRenamePolicy() | 중복 파일명 처리 정책 |
sizeLimit는 파일의 크기 제한을 1MB로 제한한다면 1 * 1024 * 1024 와 같이 표현할 수 있습니다.
2. method
1) getContentType("name")
name에 해당하는 파일의 형태가 무엇인지를 리턴합니다.
2) getOriginalFileName("name")
바뀌기 전 파일의 이름을 리턴합니다.
3) getFilesystemName("name")
업로드된 파일의 이름을 리턴합니다.
4) getFile("name")
업로드한 파일의 객체를 리턴합니다.
5) getFileNames()
파일 형태 인풋데이터의 name을 Enumeration 객체로 리턴합니다.
일반 반복자 처리하듯이 name을 뽑아낼 수 있습니다.
6) getParameter()
multipart/form-data로 넘겨준 파라미터를 받아옵니다.
만약 request.getParameter를 사용한다면 null 값을 반환합니다.
'Java, JSP' 카테고리의 다른 글
[Java/자바] List, Map 비어있는지 확인하기 (0) | 2022.03.23 |
---|---|
[JSP] MVC패턴과 Model1, Model2 (0) | 2022.02.25 |
Ajax와 동기-비동기의 개념, XMLHttpRequest 사용법 (0) | 2022.02.21 |
[Java/자바] HttpServletRequest 인터페이스의 요청정보 처리 (0) | 2022.02.19 |
[JSP] 서블릿(Servlet)과 서블릿 컨테이너(Servlet Container)의 개념 (0) | 2022.02.16 |
댓글