2014-03-19 2 views
6

Ich bin neu in Android-Programmierung. Ich habe versucht, mehrere Bilder von meiner App auf den Server mit dem folgenden Code hochzuladen. Hier wird das image [] Array auf den Server mit anderen Daten wie Benutzername, Passwort, usw. in Namevaluepair gepostet.Laden Sie mehrere Bild-Datei auf PHP-Server von Android App

Java-Code:

public void post(String url, List<NameValuePair> nameValuePairs) { 
    HttpClient httpClient = new DefaultHttpClient(); 
    HttpPost httpPost = new HttpPost(url); 
    try { 
     MultipartEntity entity = new MultipartEntity(
     HttpMultipartMode.BROWSER_COMPATIBLE); 
     for (int index = 0; index < nameValuePairs.size(); index++) { 
      if (nameValuePairs.get(index).getName() 
        .equalsIgnoreCase("image[]")) { 
       // If the key equals to "image[]", we use FileBody to transfer 
       // the data 
       Log.d("key", "image"); 
       Log.d("image path", nameValuePairs.get(index).getName()); 
       entity.addPart(nameValuePairs.get(index).getName(), 
         new FileBody(new File(nameValuePairs.get(index) 
           .getValue()))); 

      } else { 
       // Normal string data 
       Log.d("tag", nameValuePairs.get(index).getName()); 
       // Log.d("tag", nameValuePairs.get(index).getValue()); 
       entity.addPart(
         nameValuePairs.get(index).getName(), 
         new StringBody(nameValuePairs.get(index).getValue())); 
      } 
     } 
     httpPost.setEntity(entity); 
     HttpResponse response = httpClient.execute(httpPost); 
     HttpEntity enttiy = response.getEntity(); 
     Log.d("server response to post data", EntityUtils.toString(enttiy)); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

PHP-Code (Arbeitsversion):

<?php 
$target_path = "user_uploaded_photos/"; 
for($i=0;$i<count($_FILES["image"]["name"]);$i++){ 
$fileData = pathinfo(basename($_FILES["image"]["name"][$i])); 
$username = $_POST['username']; 
print_r($fileData); 
$date = date('Y_m_d_H_i_s'); 
$newfilename = $username.$i.$date.".".$fileData['extension']; 
if (move_uploaded_file($_FILES["image"]["tmp_name"][$i], $target_path."/".$newfilename)) 
{ 
    echo "The image {$_FILES['image']['name'][$i]} was successfully uploaded and added to the gallery<br />"; 
} 
else 
{ 
echo "There was an error uploading the file {$_FILES['image']['name'][$i]}, please try again!<br />"; 
} 
} $location = $_POST['location']; 
//other fields and database operations ommitted 

Mein Problem ist, mit der CakePHP Website, die wir verwenden. Für Kuchen php verwende ich Name-Wert-Paare wie folgt:

nameValuePair 
     .add(new BasicNameValuePair("UserDatum[user_id]", "2")); 

Senden Zeichenfolge Werte wie folgt funktioniert für mich. Aber wenn ich Bilder [] deklariere, werden Array-Bilder hochgeladen, aber von $ _FILES kann nicht darauf zugegriffen werden. Ich habe Bilder [] Array wie folgt deklariert:

for (String s : imagePath) { 
      nameValuePair.add(new BasicNameValuePair("UserDatum[images][]", 
        s)); 
      Log.d("image-path", s); 
     } 

Hier ImagePath ist ArrayList der Zeichenfolge mit Pfad der Bilder. Erklärt "UserDatum [Bilder] []" in App den richtigen Weg? Es funktioniert mit dem geposteten PHP, aber in Cake php werden nur String-Werte gepostet und keine Bilder. Ich habe andere Librarys wie ion versucht. Aber ich kann nur ein Foto ohne Array-Struktur hochladen. Bitte kommentiere oder weise mich auf die richtige Richtung, um mehrere Bilder und Strings in einem einzigen Beitrag zu veröffentlichen.

+0

Gibt es überhaupt nichts in $ _FILES, wenn Sie die Daten von Ihrer Android-App senden? – burzum

+0

in Kuchen php Server gibt es in $ _FILES und in der Posted PHP-Code es funktioniert wie ein Charme alles ist in Ordnung –

+0

Hinweis: echo $ _FILES ['Bild'] ['Name'] [$ i] 'könnte nicht sein sicher. – klenium

Antwort

0

Immer, wenn ich Bilddaten von einer App zu veröffentlichen, ich Base64 verwende Bild codierte (siehe: Android post Base64 String to PHP)

dass Ihnen einen besseren Weg geben könnte.

Verwandte Themen