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

조회수 6864회

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

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

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

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

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();
        }
    }
    

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

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)