2010-12-28 13 views
0

Im Versuch, ein Bild von einem Android-Client zu einem Python-Server zu senden, habe ich es vor mit einem Python-Test-Client und dem Server erreicht. Im Grunde nimmt meine Client-App ein Formular an, das aus Benutzerdetails und einem Bild besteht. Sobald der Benutzer das Bild auswählt, erhalte ich die uri im onActivityResult Verfahren und analysiere sie in einen String Wie soeine Bilddatei senden Sockets, Android zu Python

selectedImagePath = selectedImageUri.toString();

, wenn die Benutzer Treffer Taste auf dem Formular die Sendeaktivität mit den Formulardaten aufgerufen wird als Extras in einem Array in einem Bündel so.

Bundle b=new Bundle(); b.putStringArray("regValues", new String[]{name,email,selectedImagePath});

in der Sendeaktivität ich eine Verbindung mit dem Server herstellen und versuchen, das Bild wie so zu senden.

` // etablieren Verbindung mit dem Server

try{ 

    //refer to the host computer's loopback interface 
    host = InetAddress.getByName("10.0.2.2"); 
    link = new Socket(host,port); 
    in = new BufferedReader(new InputStreamReader(link.getInputStream())); 

    //access the strings that were passed to this activity 
    Bundle b = this.getIntent().getExtras(); 
    String[] regFormValues = b.getStringArray("regValues"); 

    //display connection confirmation 

    String message = in.readLine(); 
    status.setText(message); 



     File myFile = new File (regFormValues[2]); 
     byte [] mybytearray = new byte [(int)myFile.length()]; 
     FileInputStream fis = new FileInputStream(myFile); 
     BufferedInputStream bis = new BufferedInputStream(fis); 
     bis.read(mybytearray,0,mybytearray.length); 
     OutputStream os = link.getOutputStream(); 

     os.write(mybytearray,0,mybytearray.length); 
     os.flush(); 
     link.close(); 





    } 
    catch(IOException e){ 

    e.printStackTrace(); 

    } 
    ` 

Es verbindet sich mit dem Server kein Problem, die Server erstellt eine Datei für die Ausgabe der Daten als üblich zu schreiben, aber es scheint nur leer, so dass keine Daten werden empfangen. Ich denke, es könnte ein Problem mit dem Dateipfad auf der Client-Seite sein. Irgendwelche Ideen ?

EDIT: Im Grunde würde Ich mag wissen, ob ich die Bilddatei in der richtigen Weise am zugreifen oder wenn Sie bessere Vorschläge haben für den Zugriff auf und es sendet.

+0

ich nicht so scheint, ich habe die Connected to Server-Nachricht auf dem Client erhalten, damit ich weiß, dass ich nur eine leere Datei auf der Server-Seite Bis jetzt wird der Server ein Python-Client vor dem Senden und gearbeitet hat, Empfangen des Bildes Ich denke, es hat mit der Datei im Client zu tun – Shpongle

Antwort

0

Ich habe es gelöst, wie ich use selectedImageUri = Uri.fromFile(photo);, um das URI zu erhalten, wenn es von der Kamera und selectedImageUri = data.getData(); genommen wird, wenn es vom Dateibrowser ausgewählt worden ist. Ich benutzte selectedImagePath = selectedImagePath.substring(7);, um die Datei zu strippen: // den Bildpfad der Kamera zu bilden, was zu einer/SD-Karte/etc oder wo auch immer sie es speicherte. Um den Dateipfad für das Bild durch den Dateibrowser ausgewählt zu bekommen i verwendet diese

// convert the image URI to the direct file system path of the image file 
public String getRealPathFromURI(Uri contentUri) { 

    // can post image 
    String [] proj={MediaStore.Images.Media.DATA}; 
    Cursor cursor = managedQuery(contentUri, 
      proj, // Which columns to return 
      null,  // WHERE clause; which rows to return (all rows) 
      null,  // WHERE clause selection arguments (none) 
      null); // Order-by clause (ascending by name) 
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
    cursor.moveToFirst(); 

    return cursor.getString(column_index); 

Jetzt funktioniert es wie erwartet.

0

Betrachten Methoden wie File.Exists mit() und File.isFile() zu überprüfen, ob der Pfad in Ordnung ist und ob das Bild wirklich

dort überprüft

Auch wenn das Bild auch den Draht trifft - mit tcpdump ro wireshark

+0

Sowohl File.exists() und File.isFile() bestätigen, dass es die Datei nicht sieht. Die Datei existiert, daher muss es so sein, wie ich darauf zugreife. Der Weg, den ich gerade versuche, ist das Auswählen einer Datei und das Zurückgeben der uri, das Analysieren dieser Zeichenfolge und das Übergeben der Zeichenfolge an die sendende Aktivität und das Versuchen, die Datei dort zu öffnen, um sie zu senden. Irgendwelche Vorschläge, wie ich über den Zugriff auf die Datei gehen könnte – Shpongle

+0

Sie meinen "Sowohl File.exists() und File.isFile() bestätigen, dass es die Datei" Ich nehme an, Sie myFile.isFile(). Nach bis.read siehst du das Bild in mybytearray? – Abhi

+0

Ich sehe os.close() nach os.flush() - das ist vielleicht der Grund. – Abhi

Verwandte Themen