问题
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:
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();
}
来源:https://stackoverflow.com/questions/27147409/sending-a-file-with-httppost