• Android使用HttpClient向服务器传输文件


    HttpClient是Apache Jakarta Common下的子项目,可以用来提供功能丰富的支持HTTP协议的客户端编程工具包,这几天写客户端的时候遇到个问题,“客户端需要向服务器发送Post请求的时候要同时附带请求参数和文件”,刚接触HttpClient,不太了解,尝试了好久终于找到了方法,故写个随笔记一下。

    问题:

      客户端向服务器发送post请求的时候要同时带参数和文件

    开发环境:

         Android Studio1.22

    HttpClient版本:httpclient-android 4.3.5.1

    1、build.gradle中添加依赖:

    1 dependencies {
    2     compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1'
    3     compile 'org.apache.httpcomponents:httpmime:4.3.6'
    4 }

    注意:添加依赖包后编译会报一个重定义的错误,我把jar包下载下来看了一下,似乎是这个项目由maven构建的,httpclient和httpmime里面pom.xml的依赖有重复的,而且META-INF文件夹下面有很多重复的文件(具体的还是不太清楚,这些仅是自己的理解,不知道是否正确,大家仅供参考),在build.gradle中添加如下代码就可以解决了:

     1 android{
     2     packagingOptions {
     3         exclude 'META-INF/DEPENDENCIES'
     4         exclude 'META-INF/NOTICE'
     5         exclude 'META-INF/LICENSE'
     6         exclude 'META-INF/LICENSE.txt'
     7         exclude 'META-INF/NOTICE.txt'
     8     }
     9 
    10 }

    2、AndroidManifest.xml中添加相应的网络权限和文件读写权限

    1     <uses-permission android:name="android.permission.INTERNET"/>
    2     <!-- SDCard中创建与删除文件权限 -->
    3     <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
    4     <!-- 向SDCard写入数据权限 -->
    5     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    6     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

    3、上传文件:

     1         CloseableHttpClient httpClient = HttpClients.createDefault();
     2         HttpPostHC4 httpPostHC4 = new HttpPostHC4(url);
     3         File file = new File(filePath);
     4         if(file == null){
     5             throw new Exception(filePath+"指定的文件不存在");
     6         }
     7         HttpEntity multipartEntity = MultipartEntityBuilder.create()
     8                 .addPart("param1", new StringBody("param1Str"))
     9                 .addPart("param2",new StringBody("param2Str"))
    10                 .addPart("file", new FileBody(file)).build();
    11         httpPostHC4.setEntity(multipartEntity);
    12         CloseableHttpResponse response = httpClient.execute(httpPostHC4);

    其实主要是MultipartEntity的使用

  • 相关阅读:
    JaveScript简单数据类型(JS知识点归纳二)
    JaveScript变量的简介及其变量的简单使用(JS知识点归纳一)
    JaveScript用二分法与普通遍历(冒泡)
    include、include_once、require、require_once其区别
    POST和GET有什么区别?
    前端向后台发送请求有几种方式?
    jQuery的$.ajax方法响应数据类型有哪几种?本质上原生ajax响应数据格式有哪几种,分别对应哪个属性?
    java根据汉字生成首字母大写
    springboot+使用切面AOP动态获取自定义注解
    JavaScript基础05——严格模式
  • 原文地址:https://www.cnblogs.com/ljxxz/p/4680855.html
Copyright © 2020-2023  润新知