Http Post를 사용하여 이미지 전송하기


Http Post를 사용해서 안드로이드 클라이언트에서 장고 서버로 이미지를 전송하고 싶습니다. 이미지는 기기의 갤러리에서 선택할거고요. 현재 서버로 필수적인 데이터를 전송하고 장고로부터 JSON형태로 응답을 받아오기 위해서 NameValuePair 리스트를 사용 중 입니다. 이미지를 전송하고 받는 데에도 같은 방식을 써도 괜찮을까요(JSON형태의 응답에 이미지 url을 포함해서)?

그리고, 서버로부터 이미지를 다운받지 않고 원격으로 이미지에 접근하는 방법 혹은 이미지를 다운받고 Bitmap 배열에 저장한 후에 이미지를 로컬하게 사용하는 방법. 둘 중에 어떤 방법이 더 나을까요? 이미지 숫자는 10개 이하이고 사이즈는 50*50dip정도로 작습니다.

이 문제를 다루는 튜토리얼이 있으면 좋을 것 같네요.

추가:갤러리에서 선택한 이미지를 적절한 사이즈로 조절하니 서버로 전송이 되네요.

  • 2016년 06월 28일에 작성됨

조회수 801


1 답변


좋아요
0
싫어요
채택취소하기

업로드 하고자 하는 이미지의 경로와 파일이름을 알고 있다고 가정하고 시작하겠습니다. 이 문자열을 NameValuePair에 추가하시고 image를 key-name으로 사용하세요.

HttpComponents libraries를 활용해서 이미지를 전송할 수 있습니다. Dependencies package와 함께 HttpClient 최신 버전을 다운 받은 후에 apache-mime4j-0.6.jar 와 httpmime-4.0.1.jar 파일을 해당 프로젝트에 복사하시고 Java build path에 추가시키세요.

아래 import문을 클래스에 추가합니다.

import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;

이제 POST 요청에 이미지를 부착시킬 MultipartEntity를 생성할 수 있습니다. 아래 코드에서 사용 방법을 확인하시죠.

public void post(String url, List<NameValuePair> nameValuePairs) {
    HttpClient httpClient = new DefaultHttpClient();
    HttpContext localContext = new BasicHttpContext();
    HttpPost httpPost = new HttpPost(url);

    try {
        MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);

        for(int index=0; index < nameValuePairs.size(); index++) {
            if(nameValuePairs.get(index).getName().equalsIgnoreCase("image")) {
                // key값이 image일 경우 데이터 전송을 위해 FileBody 사용
                entity.addPart(nameValuePairs.get(index).getName(), new FileBody(new File (nameValuePairs.get(index).getValue())));
            } else {
                // 그냥 string 데이터
                entity.addPart(nameValuePairs.get(index).getName(), new StringBody(nameValuePairs.get(index).getValue()));
            }
        }

        httpPost.setEntity(entity);

        HttpResponse response = httpClient.execute(httpPost, localContext);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

제 답변이 도움이 되었으면 좋겠네요.

  • 2016년 06월 29일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close