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的使用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM