2013-12-12
Apache 모듈 4.3 이후 Multipart Upload 방법
시코 모바일용 서버에 사용하던 Apache 라이브러리를 최신으로 바꾸었다.
라이브러리 | 기존 버전 | 현재 버전 |
---|---|---|
httpclient | 4.2.5 | 4.3.1 |
httpcore | 4.2.4 | 4.3 |
httpmime | 4.2.5 | 4.3.1 |
사실 멀쩡히 돌아가는 서버는 웬만하면 안건드리는게 좋은데, 개인적으로 뭐가 됐든 그냥 최신버전을 쓰는게 좋아서 업데이트 해보기로 했다. 라이브러리를 교체하고 나니 경고가 뜨길래 뭔가하고 봤더니 멀티파트 업로드 방식이 4.3 이후로 기존 방법은 Deprecated 되었던 것이었다.
기존의 방법으로 문자열을 Multipart Upload 하려면 아래와 같이 MultipartEntity를 선언하고 addPart 메서드를 통해 StringBody 등을 넣어준 다음 HttpPost 객체에 넣고 Request를 보내야 했었다.
//MultipartEntity 객체 선언
//boundaryString은 Multipart 업로드시 사용할 임의의 String값
//charset은 자바에서 기본적으로 사용할 수 있는 Charset 객체
MultipartEntity reqEntity;
reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE, boundaryString, charset);
//tempString을 StringBody 객체에 넣고 MultipartEntity에 넣음
reqEntity.addPart("part", new StringBody(tempString));
//HttpPost에 삽입
httppost.setEntity(reqEntity);
그런데 이 방법에서 MultipartEntity와 StringBody 등이 Deprecated 되었고 새로 MultipartEntityBuilder가 추가되었다. 이는 다음과 같이 사용한다.
//MultipartEntityBuilder를 다음과 같이 선언
MultipartEntityBuilder meb = MultipartEntityBuilder.create();
//Builder 설정하기.
//선언할때 넣는게 아니라 선언 후 메소드로 설정한다.
meb.setBoundary(boundaryString);
meb.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
meb.setCharset(charset);
//문자열을 보내려면 addPart와 StringBody가 아닌 addTextBody를 사용한다.
meb.addTextBody("part", tempString);
//HttpEntity를 빌드하고 HttpPost 객체에 삽입한다.
HttpEntity entity = meb.build();
httppost.setEntity(entity);
StringBody같은 객체를 선언할 일이 이전보다 줄어서 예전보다 좀더 코드가 깔끔해진 느낌이다.
댓글 7
좋은 글 감사합니다~!! 현재 제가 4.5 버전으로 하다보니까 안되서 찾아보니 4.3 버전을 이용하라네요.. 아파치 서버에서는 4.3이 다운로드가 안되더라구요ㅜㅠ 개별로 받으려하는데 core, client, mime만 받으면 가능할까요~?
네, 3개 받으면 네트워크 관련 코딩이 가능하실겁니다.
감사합니다!! 해결이 되었네요 ㅎ 혹시 Server쪽에서 받아서 처리하는 부분을 찾아보려면 어떻게 검색을 해야할까요ㅠㅜ..? 찾아본다고 찾기는하는데 잘 나오질 않네요ㅠ
안녕하세요.
구글링하다가 흘러들어오게 되었습니다.
혹시 MultipartEntityBuilder의 addTextBody메소드가 정상작동 안하는 이슈가 있었나요?
파일은 정상적으로 넘어가는데 addTextBody는 넘어가지를 않네요..ㅜ
글쎄요… 들어본적이 없네요 ㅠㅠ
Charset이 제대로 설정되지 않아서 그럴수도 있을것 같네요.
안드로이드 개발을 공부해보다가 아르파님 블로그를 발견하니 정말 기쁘네요
예전 시코모바일 처음 나왔을때 잘 썼었는데..ㅎㅎ
블로그에서 좋은 내용 많이 알아갑니다~
안녕하세요 ㅎㅎ
블로그를 이쪽으로 옮기고 나서 좀더 개발 관련 포스팅에 집중할 생각입니다.
많이 들러주세요! :)