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


     

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

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

    [java] view plaincopy

    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 请求协议信息实现图片上传》     (http://bertlee.iteye.com/blog/1134576)。

            ②《关于android Http访问,上传,用了三个方法 》

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

       

    [java] view plaincopy

    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] view plaincopy

    // 封装请求参数  

            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类可以把文件封装到表单中,实现附件的上传。  

    关于httpClient上传文件可以参考链接: http://www.eoeandroid.com/forum.php?mod=viewthread&tid=76721&page=1

    需要用的的ja下载地址r:http://download.csdn.net/detail/china1988s/3791514

              参考:

                          ①《在 Android 上通过模拟 HTTP multipart/form-data 请求协议信息实现图片上传》     (http://bertlee.iteye.com/blog/1134576)。

                          ②《关于android Http访问,上传,用了三个方法 》

  • 相关阅读:
    南京师范大学2021年高等代数考研试卷
    有限阶全图边图两种颜色后同色三角形数量最少为?(2019年清华大学丘成桐数学英才班)
    关于三个变元的正整数解(2019年清华大学丘成桐数学英才班)
    [Oracle工程师手记]归档日志产生量太大时的简易分析手段
    [Oracle 工程师手记] 如何查看 FRA 的使用率
    [Oracle数据库工程师手记] Data Guard broker 与 ORA-32701
    [Oracle工程师手记]CRSD 进程与 password 文件
    [oracle 工程师手记]RMAN duplicate 发生ORA-19504、ORA-17502、ORA-15001、ORA-27140 错误的解决过程
    [Oracle工程师手记] 备份恢复双城记(三)
    [Oracle工程师手记] 备份恢复双城记(二)
  • 原文地址:https://www.cnblogs.com/zhwl/p/2403185.html
Copyright © 2020-2023  润新知