파게로그
[Spring MVC] POST 입력 - 파일 업로드 본문
웹 브라우저가 WAS 내 Servlet으로 POST를 할 때...
key1=value1&key2=value2&...로, 마치 URL의 query string과 같이 전달한다.
그런데 여기에는 문자열 외 바이너리를 포함하기는 어렵다.
이 때에는 클라이언트 인코딩을 새로 해야한다.
먼저, <form>의 enctype 속성 변경부터 보자.
기존에 우리는 application/x-www-form-urlencoded를 사용한다.
파일을 위해서는 URL 방식이 아니라 multipart/form-data 방식을 이용한다.
이를 위해 <form action="reg" method="post" enctype="multipart/form-data">로 바꾸어준다.
<input type="file" name="file"/>로 파일 업로드를 가능하도록 버튼을 만들어주면, 서버에서는 public String reg(MultipartFile file)로 받을 수 있다.
실행을 위해 설정을 해보자.
이제는 URL 방식이 아니라, 각각의 key와 value를 파트로 나누어서 아래와 같이 전달된다.
Content-Disposition: form-data; name="uid"
ddoongi
Content-Disposition: form-data; name="name"
berry
Content-Disposition: form-data; name="file"; filename="marble.jpg"
3AF90CD0D92A86.....
서버와 클라이언트의 기본 인코딩 방식은 둘 다 application/x-www-form-urlencoded이다.
그래서 서버에서도 변경이 필요하다.
multipart를 이해할 수 있도록 servlet-context.xml에 다음과 같은 내용을 추가한다.
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="314572800"/>
</bean>
이는 org.springframework.web.multipart.commons.CommonsFileUploadSupport를 상속받는다.
파일마다의 사이즈, 총 파일 사이즈를 정할 수 있다.
setDefaultEncoding은 기본적인 인코딩 방식이 ISO-8859-1인데... ServletFilter를 통해 UTF-8로 바꾸어두어서 괜찮다.
한편 commons-fileupload commons-fileupload를 Maven dependencies에 추가해준다.
'콤퓨타 왕기초 > Spring' 카테고리의 다른 글
[Spring MVC] @GetMapping, @PostMapping (0) | 2021.05.03 |
---|---|
[Spring MVC] POST 입력 - 파일 저장하기(물리경로 얻기) (0) | 2021.05.03 |
[Spring MVC] POST 입력 및 한글 깨짐 (0) | 2021.05.03 |
[Spring MVC] Query String 파싱, @RequestParam (0) | 2021.05.03 |
[Spring MVC] 사용자 입력 (0) | 2021.05.03 |