Programming/Android

[Android] 안드로이드에서 httpPost multiparts로 전송하기(멀티파트, 멀티파츠)

Fimtrus 2014. 6. 24. 16:10

안드로이드에서는 httpClient의 버전이 낮아 multiparts를 지원하지 않는다.


보내고 싶다면 httpConnection을 열고, buffer를 통해서 전송해야 하는데,


만들기가 여간 귀찮은 것이 아니다.


apache에서 httpComponents를 제공하고 있는데, 해당 라이브러리를 사용하면,


별다른 구현을 하지 않더라도 multiparts로 전송할 수 있게 된다.


물론 약 1메가 정도의...라이브러리가 추가되긴 하지만..



아파치 사이트로 이동하여 httpClient 최신버전을 다운받는다.(전 4.3.X 버전 사용중)


Download Page(Click)


당연히 jar 파일이 필요하기 때문에 binary를 클릭해서 받아준다.




다운후 압축을 해제하게 되면, examples, lib, tutorial 폴더가 나오는데,


lib에 있는 jar파일들을 안드로이드 프로젝트의 libs 폴더로 복사하면 된다.


이제 multiparts로 전송하기 위한 준비는 다 되었고, 아래의 코드를 이용하여 보내면 된다.


//Multipart 객체를 선언한다.
MultipartEntityBuilder builder = MultipartEntityBuilder.create() //객체 생성...
	.setCharset(Charset.forName("UTF-8")) //인코딩을 UTF-8로.. 다들 UTF-8쓰시죠?
	.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); 
builder.addPart("content",  new FileBody(== 파일객체 ==) ); //빌더에 FileBody 객체에 인자로 File 객체를 넣어준다.
builder.addPart("testKey",  "testData" ); //스트링 데이터..

HttpClient client = AndroidHttpClient.newInstance("Android");

HttpPost post = new HttpPost(== url ==); //전송할 URL 
try {
	post.setEntity(builder.build()); //builder.build() 메쏘드를 사용하여 httpEntity 객체를 얻는다.
	HttpResponse httpRes;
	httpRes = client.execute(post);
	HttpEntity httpEntity = httpRes.getEntity();
	if (httpEntity != null) {
		response = EntityUtils.toString(httpEntity);
	}
} catch (UnsupportedEncodingException e) {
} catch (ClientProtocolException e1) {
} catch (IOException e1) {
} catch (ParseException e) {
}


위와 같이 전송하게 되면, 내부적으로 Stream을 이용하여 서버로 전송하게 되어


따로 작업을 하지 않더라도 multiparts 형태로 전송할 수 있다.