Android HttpClient上传文件与Httpconnection知识小结分析

阿里 阅读:285 2021-04-01 10:04:35 评论:0

Android上传文件到服务端可以使用HttpConnection 上传文件,也可以使用Android封装好的HttpClient类。当仅仅上传文件可以直接使用httpconnection 上传比较方便快捷。

 

        1、使用HttpConection上传文件。将文件转换成表单数据流。主要的思路就自己构造个http协议内容,服务端解析报文获得表单数据。代码片段:

 

[java]

HttpURLConnection con; 

    try { 

        con = (HttpURLConnection) url.openConnection(); 

        con.setConnectTimeout(C_TimeOut); 

        /* 允许Input、Output,不使用Cache */ 

        con.setDoInput(true); 

        con.setDoOutput(true); 

        con.setUseCaches(false); 

        /* 设置传送的method=POST */ 

        con.setRequestMethod("POST"); 

        /* setRequestProperty */ 

        con.setRequestProperty("Connection", "Keep-Alive"); 

        con.setRequestProperty("Charset", "UTF-8"); 

        con.setRequestProperty("Content-Type","multipart/form-data;boundary=" + boundary); 

     

        /* 设置DataOutputStream */ 

         DataOutputStream ds = new DataOutputStream(con.getOutputStream()); 

         FileInputStream fStream = new FileInputStream(file); 

 

          /* 设置每次写入1024bytes */ 

          int bufferSize = 1024; 

          byte[] buffer = new byte[bufferSize]; 

 

          int length = -1; 

          /* 从文件读取数据至缓冲区 */ 

          while((length = fStream.read(buffer)) != -1) 

          { 

            /* 将资料写入DataOutputStream中 */ 

            ds.write(buffer, 0, length); 

          }  

          fStream.close();  

          ds.flush(); 

          ds.close(); 

          

 

可以参考

 

        ①《在 Android 上通过模拟 HTTP multipart/form-data 请求协议信息实现图片上传》             ②《关于android Http访问,上传,用了三个方法 》

 

2、使用Android HttpClient类上传参数。下面我在网上搜到得代码,忘记出处了

 

  

 

[java] 

private static boolean sendPOSTRequestHttpClient(String path, 

        Map<String, String> params) throws Exception { 

    // 封装请求参数 

    List<NameValuePair> pair = new ArrayList<NameValuePair>(); 

    if (params != null && !params.isEmpty()) { 

        for (Map.Entry<String, String> entry : params.entrySet()) { 

            pair.add(new BasicNameValuePair(entry.getKey(), entry 

                    .getValue())); 

        } 

    }  

    // 把请求参数变成请求体部分 

    UrlEncodedFormEntity uee = new UrlEncodedFormEntity(pair, "utf-8");  

    // 使用HttpPost对象设置发送的URL路径 

    HttpPost post = new HttpPost(path);  

    // 发送请求体 

    post.setEntity(uee);  

    // 创建一个浏览器对象,以把POST对象向服务器发送,并返回响应消息 

    DefaultHttpClient dhc = new DefaultHttpClient(); 

    HttpResponse response = dhc.execute(post); 

    if (response.getStatusLine().getStatusCode() == 200) { 

        Log.i("http", "httpclient"); 

        return true; 

    } 

    return false; 

 

3、使用httpClient上传文字信息和文件信息。使用httpClient上传文件非常的方便。不过需要导入apache-mime4j-0.6.jar 和httpmime-4.0.jar两个.jar包。

 

[java] 

// 封装请求参数 

        MultipartEntity mpEntity = new MultipartEntity(); 

        if (params != null && !params.isEmpty()) { 

            for (Map.Entry<String, String> entry : params.entrySet()) { 

 

                StringBody par = new StringBody(entry.getValue()); 

                mpEntity.addPart(entry.getKey(), par); 

            } 

        } 

        // 图片 

        if (!imagepath.equals("")) { 

            FileBody file = new FileBody(new File(imagepath)); 

            mpEntity.addPart("photo", file); 

        } 

        // 使用HttpPost对象设置发送的URL路径 

        HttpPost post = new HttpPost(path); 

        // 发送请求体 

        post.setEntity(mpEntity); 

        // 创建一个浏览器对象,以把POST对象向服务器发送,并返回响应消息 

        DefaultHttpClient dhc = new DefaultHttpClient(); 

        HttpResponse response = dhc.execute(post); 

 

 

FileBody 类可以把文件封装到表单中,实现附件的上传
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

发表评论
搜索
KIKK导航

KIKK导航

排行榜
关注我们

一个IT知识分享的公众号