병갈이 블록

홈페이지02 - 파일전송 테스트 본문

IT(Old)/JSP 실습 과정 기록

홈페이지02 - 파일전송 테스트

woojang 2017. 7. 29. 02:48

사진전송관련 테스트.

1. 1. 파일을 전송할 jsp페이지에서 폼 인코딩 타입지정.

post전송방식은 두가지 인코딩방식으로 동작한다.

- application/x-www-form-urlencoded

- multipart/form-data

일반적인 post환경(문자열 전송등)은 "application/x-www-form-urlencoded"을 이용했다.(기본값)

그러나 사진 등 파일을 업로드 하기위해선 "multipart/form-data"을 사용해야한다.


<form action="전송경로" method="post" enctype="multipart/form-data">

1. 2. web.xml에 multipart-config를 등록해준다. 

- 이 파일을 처리할 서블릿이 등록된 web.xml에 <multipart-config>를 등록해서 관련 정보를 설정해준다.

- 그래야 서블릿에서 request로 넘어오는 Part를 제대로 받을 수 있다.


2. 속성과 관련된 설명.

1. request관련 메서드

- request.getContentType() : 폼으로 전송된 인코딩 타입이 담겨있다.

enctype 미 지정시 : "application/x-www-form-urlencoded" 출력.

enctype을 multipar로 지정시 : "multipart/form-data; boundary=----------------" 형태로 출력.

이녀석으로 파일이 전송된건지, 아니면 일반 텍스트 자료가 전송된건지 확인.

- request.getParts()

Collection<Part> 자료형을 받아온다. 하나의 Part가 하나의 파일이다. 

즉, 파일 전송이 여러개일 경우 이 메서드를 사용해야 한다.

request.getPart(String name)

Part 자료형을 받아온다. 하나의 데이터만 받고 name매개변수에는 input태그의 name속성값을 적는다.


2. Part 관련 메서드

- getContentType()

ContentType을 받아온다. 이미지의 경우 "image/확장자"로 출력된다.

- getName() :

input태그의 name속성의 값이 출력된다.

- getSize()

long형을 반환하고 파일의 크기를 '바이트(byte)'단위로 나타낸다.

- getSubmittedFileName()

explorer에서는 파일의 실제 경로를 출력하고, 크롬에서는 파일이름만 출력한다.

- getHeader(String name) :

* 헤더 목록.

- Content-Disposition : 

Content의 성질? 무튼, 여기서는 {form-data; name="name"; filename="filename"; } 이렇게 세가지가 들어가있다.

name, filename의 경우는 위 getName, getSubmittedFileName메서드로 얻을 수 있다.

- Content-Type : 위의 getContentType과 같은 결과.

- getHeaderNames() : Collection<String>으로 헤더 목록을 반환한다.


** 파일 출력관련 메서드

- write(String path) : 실제 경로 및 파일이름을 path에 입력한다. 파일을 출력한다.

- delete() : write를 완료한 이후에 호출하는 메서드.


** 경로를 정할 때 문자 "\" 와 "/". 둘다 되는데 하나로 통일을 하자. 그래야 안복잡해 보인다.


PS. multipart전송시 getPart, getParts메서드가 empty를 토하는 이유.

- 이걸로 쌩 쑈를 다 했다. 아무리 해도 Part를 계속 못받아오는 것이다.

- 검색을 하다보니 web.xml에 대한 언급들이 있기에 혹시나 하는 생각으로 web.xml에 multipart-config를 입력한다.

- 된다..;;;;에혀....1.2로 추가했다.

Comments