Sending a file with HttpPost?

481 views Asked by At

I'm trying send an image to web service using HttpPost. The problem is when I try send image return an error that image does not found, but image exist I selected that in gallery.

How can I solve this ?

Here how I'm trying

public Boolean insert(Usuario u, String fotoPath){
    HttpClient httpClient = new DefaultHttpClient();        
    HttpPost httppost = new HttpPost(urlPost.toString());

    try {
        File img = new File(fotoPath, ConvertStringToMD5.getMD5(u.getEmail().split("@")[0]));
        httppost.addHeader("Authorization", "Basic " + BasicAuthenticationRest.getBasicAuthentication());
        MultipartEntity me = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
        me.addPart("nome", new StringBody(u.getNome()));
        me.addPart("email", new StringBody(u.getEmail()));
        me.addPart("senha", new StringBody(ConvertStringToMD5.getMD5(u.getSenha())));
        me.addPart("device_tipo", new StringBody("android"));
        me.addPart("device", new StringBody(AndroidReturnId.getAndroidId()));
        me.addPart("uploadedfile", new FileBody(img, "image/png"));         
        httppost.setEntity(me);

        HttpResponse response = httpClient.execute(httppost);
        HttpEntity entity = response.getEntity();
        if(entity != null){
                String js = EntityUtils.toString(entity);
                Log.i("JSON: ", js);
                JSONObject json = new JSONObject(js);
                if(json.getString("cod").equals("999")){
                    return true;
                }                
        }
    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
    } catch (IOException e) {
        // TODO Auto-generated catch block
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 
    return false;
}

LogCat

    11-26 09:53:01.945: D/ProgressBar(3673): setProgress = 0
11-26 09:53:01.945: D/ProgressBar(3673): setProgress = 0, fromUser = false
11-26 09:53:01.945: D/ProgressBar(3673): mProgress = 0mIndeterminate = false, mMin = 0, mMax = 10000
11-26 09:53:02.010: D/dalvikvm(3673): GC_FOR_ALLOC freed 166K, 18% free 17240K/20992K, paused 20ms, total 20ms
11-26 09:53:02.040: I/Path Foto:(3673): /storage/emulated/0/InstaSize.png
11-26 09:53:02.085: D/dalvikvm(3673): DexOpt: couldn't find static field Lorg/apache/http/message/BasicHeaderValueParser;.INSTANCE
11-26 09:53:02.085: W/dalvikvm(3673): VFY: unable to resolve static field 6632 (INSTANCE) in Lorg/apache/http/message/BasicHeaderValueParser;
11-26 09:53:02.085: D/dalvikvm(3673): VFY: replacing opcode 0x62 at 0x001b
11-26 09:53:02.090: D/dalvikvm(3673): DexOpt: couldn't find static field Lorg/apache/http/message/BasicHeaderValueFormatter;.INSTANCE
11-26 09:53:02.090: W/dalvikvm(3673): VFY: unable to resolve static field 6626 (INSTANCE) in Lorg/apache/http/message/BasicHeaderValueFormatter;
11-26 09:53:02.090: D/dalvikvm(3673): VFY: replacing opcode 0x62 at 0x0015
11-26 09:53:02.090: D/ProgressBar(3673): updateDrawableBounds: left = 0
11-26 09:53:02.090: D/ProgressBar(3673): updateDrawableBounds: top = 0
11-26 09:53:02.090: D/ProgressBar(3673): updateDrawableBounds: right = 96
11-26 09:53:02.090: D/ProgressBar(3673): updateDrawableBounds: bottom = 96
11-26 09:53:02.205: E/ViewRootImpl(3673): sendUserActionEvent() mView == null
1

There are 1 answers

3
Pragnesh Ghoda  シ On BEST ANSWER

You can send either NameValuePair or MultipartEntity at a time...

When you are working with HttpPost, you can send parameters by setEntity() method.. there is no such methods like appendEntity() or somewhat.. so you have to set parameters at Once..

You can not send paramters in both NameValuePair and MultipartEntity at a time.. You have to choose one of them..

So in your code you are sending parameters with NameValuePair only. you are creating MultipartEntity parameter for image but you are not sending it with HTTPPost...

Try this way.. this may help you..

 try {
    httppost.addHeader("Authorization", "Basic " + BasicAuthenticationRest.getBasicAuthentication());

    MultipartEntity me = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);         

    me.addPart("nome", new StringBody(getNome())); // to send string params 
    me.addPart("email", new StringBody(u.getEmail()));
    //other parameters

    //creating image/file parameter to send
    me.addPart("uploadedfile",new FileBody(new File(fotoPath))); // file parameter

    //setting entity to HTTPPost
    if(me!=null){
    //avoiding NullPointerException
    httppost.setEntity(new UrlEncodedFormEntity(me)); // sending MultipartEntity as entity
    }

    //getting response
    HttpResponse response = httpClient.execute(httppost);
    HttpEntity entity = response.getEntity();            
    if(entity != null){
            String js = EntityUtils.toString(entity);
            Log.i("JSON: ", js);
            JSONObject json = new JSONObject(js);
            if(json.getString("cod").equals("999")){
                return true;
            }                
    }
} catch (ClientProtocolException e) {
    // TODO Auto-generated catch block
} catch (IOException e) {
    // TODO Auto-generated catch block
} catch (JSONException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}