2010-03-30 88 views
6

一個PHP的服務器我要上傳圖片到其預計HTTPPOST以下參數遠程PHP服務器:上傳圖片從Android

*$_POST['title']* 
*$_POST['caption']* 
*$_FILES['fileatt']* 

大部分的互聯網搜索的建議之一:

下載下面的類,並試圖MultiPartEntity發送請求:

apache-mime4j-0.5.jar 
httpclient-4.0-beta2.jar 
httpcore-4.0-beta3.jar 
httpmime-4.0-beta2.jar 

OR

使用URLconnection並自己處理多部分數據。

順便說一句,我很熱衷於使用的HttpClient類,而不是java.net(或者是android.net)班。最後,我從Android源代碼下載了Multipart類,並將它們用於我的項目中。

雖然這可以通過任何上述方法做,我想確保,如果這些都實現上述目標的唯一途徑。我瀏覽了文檔,發現一個FileEntity類,但我無法讓它工作。

在Android應用程序中完成此操作的正確方法是什麼?

謝謝。

+0

爲便於執行看到我的[發佈](http://vikaskanani.wordpress.com/2011/01/11/android-upload-image-or-file-using-http-post-multi-part/)。 – Vikas 2011-01-18 03:56:06

回答

5

Android源似乎帶有內部多部分幫助程序庫。 See this post。乍看之下,它比許多公共API(咳嗽咳嗽,SoundPool,咳嗽咳嗽)更好地記錄下來,所以它應該是一個很好的開始,或者可以很好地使用插入式解決方案。

+0

是的,我也看到了該線程,並設法下載「multipart」包,並通過更改包名來使用它。感謝您的回覆。 – Samuh 2010-04-03 15:39:39

+1

你也可以看看官方的Apache HTTPMime項目:http://hc.apache.org/httpcomponents-client/httpmime/apidocs/index.html它基於Mime4j,我沒有親自使用它,但它似乎目的是在HTTPClient 4上做多部分;它可能會與Android HTTPClient一起工作,但我無法確定。 – 2010-04-03 17:07:08

3

我也正是以與預期參數,好像他們是從HTML頁發佈的圖像託管服務器(在PHP中也實現)交互。

我建立了我的鑰匙的List<NameValuePair>和值是這樣的:

List<NameValuePair> params = new ArrayList<NameValuePair>(2); 
    params.add(new BasicNameValuePair(key1, value1)); 
    params.add(new BasicNameValuePair(key2, value2)); 

,然後我把它傳遞給我的HTTP助手類,它設置我的HttpPost請求的HttpEntity財產。以下是我的幫手類中的方法:

public static HttpResponse Post(String url, List<NameValuePair> params, Context context) 
{ 
    HttpResponse response = null; 
    try 
    { 
     HttpPost request = new HttpPost(); 
     request.setURI(new URI(url)); 
     if(params != null) 
      request.setEntity(new UrlEncodedFormEntity(params)); 
     HttpClient client = ((ApplicationEx)context.getApplicationContext()).getHttpClient(); 
     response = client.execute(request); 
    } 
    catch(Exception ex) 
    { 
     // log, etc 
    } 
    return response; 
} 
+0

你準確創建什麼類型的實體對象來封裝文件對象? – Samuh 2010-03-30 16:56:31

+0

那麼......如果我擁有合同的雙方,我不會使用$ _FILES數組...我會發送一個常規的鍵/值對作爲一個後置參數,其中的值是一個字節流。如果我只擁有客戶端和服務器嚴格要求$ _FILES的東西,我會用一個簡單的表單做一個測試html頁面(文件上傳),用提琴手跟蹤它,然後手動構建post payload以反映標題和有效載荷。瀏覽器創建一個「邊界」字符串,通過頭部告訴服務器邊界是什麼,然後將字節流封裝在這個邊界中。你也可以做到的。 – Rich 2010-03-30 17:31:13

+0

這正是我說的意思:使用URLconnection並自己處理多部分數據。 我真正想要的是像MultipartEntity這樣的類來處理所有這些對我來說。不幸的是,這個類沒有導入Android。然而,這個文檔引入了一個FileEntity類,我想知道如何使用它。 – Samuh 2010-04-01 05:41:41

4

也許這post在官方Android組幫助。這傢伙正在使用mime4j。

另一個有用的資源可以是在臨Android的書this example