发送带有HttpPost文件? [英] Sending a file with HttpPost?

查看:226
本文介绍了发送带有HttpPost文件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图使用HttpPost发送图像的Web服务。问题是,当我尝试发送图像返回一个错误,图像不中,但图像存在我选择了在画廊。

我该如何解决呢?

下面我如何努力

 公共布尔插入(Usuario U,串fotoPath){
    HttpClient的HttpClient的=新DefaultHttpClient();
    HttpPost httppost =新HttpPost(urlPost.toString());    尝试{
        文件IMG =新的文件(fotoPath,ConvertStringToMD5.getMD5(u.getEmail()分裂(@)[0]));
        httppost.addHeader(授权,基本+ BasicAuthenticationRest.getBasicAuthentication());
        MultipartEntity我=新MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
        me.addPart(咔嗒,新StringBody(u.getNome()));
        me.addPart(电子邮件,新StringBody(u.getEmail()));
        me.addPart(senha,新StringBody(ConvertStringToMD5.getMD5(u.getSenha())));
        me.addPart(device_tipo,新StringBody(机器人));
        me.addPart(设备,新StringBody(AndroidReturnId.getAndroidId()));
        me.addPart(UploadedFile的新FileBody(IMG,图像/ PNG));
        httppost.setEntity(箱);        HTT presponse响应= httpClient.execute(httppost);
        HttpEntity实体= response.getEntity();
        如果(实体!= NULL){
                字符串JS = EntityUtils.toString(实体);
                Log.i(JSON,JS);
                JSONObject的JSON =新的JSONObject(JS);
                如果(json.getString(鳕鱼)。等于(999)){
                    返回true;
                }
        }
    }赶上(ClientProtocolException E){
        // TODO自动生成catch块
    }赶上(IOException异常五){
        // TODO自动生成catch块
    }赶上(JSONException E){
        // TODO自动生成catch块
        e.printStackTrace();
    }
    返回false;
}

LogCat中

  9月11日至26日:53:01.945:D /进度(3673):setProgress = 0
9月11日至26日:53:01.945:D /进度(3673):setProgress = 0,FROMUSER = FALSE
9月11日至26日:53:01.945:D /进度(3673):mProgress = 0mIndeterminate =假,MMIN = 0,M最大= 10000
9月11日至26日:53:02.010:D / dalvikvm(3673):GC_FOR_ALLOC释放166K,18%免费17240K / 20992K,暂停为20ms,20ms的总
9月11日至26日:53:02.040:I /路径照片:(3673):/storage/emulated/0/InstaSize.png
9月11日至26日:53:02.085:D / dalvikvm(3673):DexOpt:找不到静态字段Lorg /阿帕奇/ HTTP /消息/ BasicHeaderValueParser; .INSTANCE
9月11日至26日:53:02.085:W / dalvikvm(3673):VFY:无法解析静态字段6632(实例)在Lorg /阿帕奇/ HTTP /消息/ BasicHeaderValueParser;
9月11日至26日:53:02.085:D / dalvikvm(3673):VFY:在0x001b更换运code 0X62
9月11日至26日:53:02.090:D / dalvikvm(3673):DexOpt:找不到静态字段Lorg /阿帕奇/ HTTP /消息/ BasicHeaderValueFormatter; .INSTANCE
9月11日至26日:53:02.090:W / dalvikvm(3673):VFY:无法在Lorg /阿帕奇/ HTTP /消息/ BasicHeaderValueFormatter解决静态字段6626(实例);
9月11日至26日:53:02.090:D / dalvikvm(3673):VFY:在更换运code 0X62 0x0015
9月11日至26日:53:02.090:D /进度(3673):updateDrawableBounds:左= 0
9月11日至26日:53:02.090:D /进度(3673):updateDrawableBounds:顶部= 0
9月11日至26日:53:02.090:D /进度(3673):updateDrawableBounds:右= 96
9月11日至26日:53:02.090:D /进度(3673):updateDrawableBounds:底部= 96
9月11日至26日:53:02.205:E / ViewRootImpl(3673):sendUserActionEvent()== MView的空


解决方案

您可以发送任何的NameValuePair <​​/ code>或 MultipartEntity 同时...

当您使用 HttpPost 工作,你可以通过 setEntity()方法发送参数..有没有这样的方法,如 appendEntity()或有点..所以你必须一次设置的参数。

您不能发送在paramters两个的NameValuePair <​​/ code>和 MultipartEntity 在一个时间。你必须选择其中之一..

因此​​,在您code你与的NameValuePair <​​/ code>发送参数而已。要创建 MultipartEntity 参数的形象,但你不与 HTTPPost ...

在发送

尝试这种方式。这可以帮助你..

  {尝试
    httppost.addHeader(授权,基本+ BasicAuthenticationRest.getBasicAuthentication());    MultipartEntity我=新MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);    me.addPart(咔嗒,新StringBody(getNome())); //发送串PARAMS
    me.addPart(电子邮件,新StringBody(u.getEmail()));
    //其他参数    //创建图像/文件参数发送
    me.addPart(UploadedFile的新FileBody(新文件(fotoPath))); //文件参数    //设置实体HTTPPost
    如果(我!= NULL){
    //避免NullPointerException异常
    httppost.setEntity(新UrlEn codedFormEntity(我)); //发送MultipartEntity作为实体
    }    //得到响应
    HTT presponse响应= httpClient.execute(httppost);
    HttpEntity实体= response.getEntity();
    如果(实体!= NULL){
            字符串JS = EntityUtils.toString(实体);
            Log.i(JSON,JS);
            JSONObject的JSON =新的JSONObject(JS);
            如果(json.getString(鳕鱼)。等于(999)){
                返回true;
            }
    }
}赶上(ClientProtocolException E){
    // TODO自动生成catch块
}赶上(IOException异常五){
    // TODO自动生成catch块
}赶上(JSONException E){
    // TODO自动生成catch块
    e.printStackTrace();
}

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

解决方案

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

这篇关于发送带有HttpPost文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆