2016-09-22 2 views
1

Ich lade einige Bilder von Android auf Server mit PHP. Die Image-Datei wird hochgeladen, aber wenn ich versuche, diese Datei zu sehen, zeigt das defekte Image nicht, was genau das Problem ist. Der Upload wird im Android-CodeBild Hochladen Problem von Android auf PHP-Server

AsyncTask getan
FileInputStream fileInputStream; 
    HttpURLConnection connection; 
    URL url; 
    DataOutputStream outputStream; 
    int bytesRead,bytesAvailable,bufferSize; 
    byte[] buffer; 
    int maxBufferSize = 1 * 1024 * 1024; 
    File selectedFile = new File(selectedImagePath); 
try 
     { 
      fileInputStream = new FileInputStream(selectedFile); 
      url = new URL("The url of my server"); 
      connection= (HttpURLConnection)url.openConnection(); 
      Log.v(TAG,"connection established"); 
      connection.setDoOutput(true); 
      connection.setDoInput(true); 
      connection.setRequestMethod("POST"); 
      connection.setRequestProperty("Connection","Keep-Alive"); 
      connection.setRequestProperty("ENCTYPE","multipart/form-data"); 
      connection.setRequestProperty("Content-Type","multipart/form-data;boundary=*****"); 
      connection.setRequestProperty("uploaded_file",selectedImagePath); 

      outputStream = new DataOutputStream(connection.getOutputStream()); 

      outputStream.writeBytes("--*****\r\n"); 

      outputStream.writeBytes("Content-Disposition:form-data;name=\"uploaded_file\";filename=\""+selectedImagePath+"\""+"\r\n"); 
      outputStream.writeBytes("\r\n"); 
      outputStream.writeBytes("--*****\r\n"); 
      bytesAvailable = fileInputStream.available(); 
      bufferSize = Math.min(bytesAvailable,maxBufferSize); 
      buffer = new byte[bufferSize]; 

      bytesRead = fileInputStream.read(buffer,0,bufferSize); 
      while (bytesRead>0) 
      { 
       outputStream.write(buffer,0,bufferSize); 
       bytesAvailable = fileInputStream.available(); 
       bufferSize = Math.min(bytesAvailable,maxBufferSize); 
       bytesRead = fileInputStream.read(buffer,0,bufferSize); 
      } 
      outputStream.writeBytes("\r\n"); 
      outputStream.writeBytes("--*****\r\n"); 
      int serverResponseCode = connection.getResponseCode(); 
      String serverResponseMessage = connection.getResponseMessage(); 

      if(serverResponseCode == HttpURLConnection.HTTP_OK) { 
       String line; 
       StringBuilder sb = new StringBuilder(); 
       BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
       while ((line = reader.readLine()) != null) { 
        sb.append(line); 
       } 


      } 
      fileInputStream.close(); 
      outputStream.flush(); 
      outputStream.close(); 
PHP Code: 
$file_path = basename($_FILES['uploaded_file']['name']); 
if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $file_path)) 
{ 
    echo "success"; 
} else 
{ 
    echo "fail"; 
} 

Bild auf dem Server angezeigt: enter image description here

+0

'outputStream.write (buffer, 0, buffer);'. Das sollte 'outputStream.write (buffer, 0, bytesRead);' sein. – greenapps

+0

Bitte vergleichen Sie die Dateigröße von Original und hochgeladenem. – greenapps

+0

Vielen Dank für Ihre Antwort, aber es ist jetzt fertig !! Das Problem war mit dem Schließen des Dateiblocks. – Akki

Antwort

0

Um Byte-Array oder Base64-Format für Bild statt mehrteiliger einfache Lösung wäre zu schreiben.

prüfen dies: Uploading image from android to php server

+0

Vielen Dank für Ihre schnelle Antwort, aber es zeigt das gleiche gebrochene Bild nach dem Hinzufügen von Header @Jai – Akki

+0

Ja, weil Sie Content-Typ "Multipart" von der Client-Seite übergeben. Verwenden Sie das Base64-Format anstelle von Multipart. das wäre einfach für das Hochladen von Bildern – Jai

+1

Danke für deine Antwort. Aber ich habe die Lösung und ihre Arbeit jetzt mit multipart.Actually that Problem war ich beendete den Bildblock mit dieser 'outputStream.writeBytes ("- ***** \ r \ n");' vor dem Senden der Byte-Array – Akki