2012년 1월 6일 금요일

HttpClient 를 이용한 POST 방식의 첨부파일 전송

일단, Apache 재단의 위대함을 찬양함!!!

Apache 에서는 우리에게 일용할 수많은 프로그램과 라이브러리를 제공해 주시는데, 그 중에 HttpClient 도 존재한다. 이 라이브러리는 Java 코드에서 HTTP 프로토콜로 GET 혹은 POST 로 값을 전송할 때 유용하다.

그런데 파일을 포함한 전송(enctype을 파일전송으로 세팅해서 보내고 싶을 때)의 경우 예전 방식으로 설명된 것이 대부분이라...해당 method 들이 폐기예정 상태가 되어 보기가 싫다. 난 밑줄 그어진 method 는 싫어요~~~

그래서 아래와 같이 구현하면 된다.

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.multipart.FilePart;
import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
import org.apache.commons.httpclient.methods.multipart.Part;

...
...
...

File testFile1 = new File()

...
...
...

HttpClient client = new HttpClient();
PostMethod post = new PostMethod(url);

Part[] parts = { new StringPart("test1", "testValue1"), new FilePart("test2", testFile1) };

post.setRequestEntity(new MultipartRequestEntity(parts, post.getParams()));

try {

    int status = client.executeMethod(post);

    if (status == HttpStatus.SC_OK) {

        // 전송 성공(200)

    } else {

        // 전송 실패

    }

} finally {

    post.releaseConnection();

}

참 쉽죠잉~~~(쉽긴 개뿔...-_-);

요점은...기존과 달리 일반 PostMethod 로 만든 뒤 Part[] 를 이용해서 일반값와 이진값을 파트로 만들어서 request entity(요청 요소 쯤 되려나)에 실어서 보낸다는 것이다.



참고할 사람들은 참고해주시고, 퍼가지 마시고...퍼가더라도 출처와 링크는 정확히 걸어주세요~