# gpx-Datei von Smartphone auf Server uploaden



## d9 (13. Feb 2012)

Hallo!

Ich versuche, eine gpx Datei von einem Android-Smartphone auf einen Server upzuloaden. Der Java-Code sieht folgendermaßen aus:



```
void uploadFile(FileInputStream fin, String filestr) {
      String urlstr = "http://meinusername.bplaced.net/www/upload.php";
      String boundary = "-------------------XYZ12345XYZ";
      String imgheader = "Content-Disposition: form-data; name=\"uploadedfile\"; filename=\""
         + filestr + "\"\r\n"
         + "Content-Type: text/plain\r\n"
         + "\r\n";
      try {
          URLConnection uc = (HttpURLConnection)(new URL(urlstr)).openConnection();
          uc.setDoOutput(true);
          uc.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
          OutputStream out = uc.getOutputStream();
          out.write(("--"+boundary+"\r\n").getBytes());
          out.write(imgheader.getBytes());
          byte[] buf = new byte[4096];
          int len;
          while ((len = fin.read(buf)) > 0) {
             out.write(buf, 0, len);
          }
          out.write(("--"+boundary+"\r\n").getBytes());
          out.flush();
          out.close();
         
      } catch(MalformedURLException e) {
          e.printStackTrace();
      }
      catch(IOException e) {
          e.printStackTrace();
      }
  }
```

ich rufe die Funktion mittels 


```
try {
	FileInputStream fIn = openFileInput("/sdcard/GPSLogger/"+currentTripName+".gpx");
	uploadFile(fIn, currentTripName + ".gpx");
} catch (FileNotFoundException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}
```
 auf.

die upload.php sieht so aus:


```
<?php
$target_path = "uploads/";

$target_path = $target_path . basename( $_FILES['uploadedfile']['name']);

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
echo "The file ". basename( $_FILES['uploadedfile']['name']).
" has been uploaded";
} else{
echo "There was an error uploading the file, please try again!";
}

?>
```

wenn ich aber die Funktion aufrufe stürzt das Programm aber immer ab. Muss ich da noch irgendetwas einstellen?? vielleicht irgendwelche Benutzerdaten im php Code oder so, damit ich die Datei überhaupt uploaden kann?


----------



## schlingel (13. Feb 2012)

Wo ist die *Exception*? (*seufz*)
Hast du die Berechtigung im Manifest-File gesetzt? Für's Netzwerk brauchst du die INTERNET Permission.


----------



## d9 (13. Feb 2012)

ok die habe ich auch schon gesetzt, jetzt bin ich wenigstens soweit, dass ich keinen Fehler mehr bekomme... und nach dem flushen des OutputStreams lasse ich folgendes ausgeben:


```
Toast.makeText(getBaseContext(),serverResponseMessage + "\n"+ serverResponseCode,
	Toast.LENGTH_LONG).show();
```

da bekomme ich für die ResponseMessage "OK" und als Code "100" zurück.
von der Client-Seite dürfte somit wohl alles stimmen oder?


----------



## d9 (13. Feb 2012)

zur Info: habe das php script etwas geändert und versucht über die Internetmaske eine Datei upzuloaden, hat funktioniert!


```
<form enctype="multipart/form-data" action="upload.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
Choose a file to upload: <input name="uploadedfile" type="file" /><br />

<input type="submit" value="Upload File" />
</form> 
<?php
$target_path = "./";

$target_path = $target_path . basename( $_FILES['uploadedfile']['name']);

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) 
{
echo "The file ". basename( $_FILES['uploadedfile']['name'])." has been uploaded";
}
else
{
echo "There was an error uploading the file, please try again!";
}

?>
```


----------



## schlingel (14. Feb 2012)

Also, laut Doku bedeutet Code 100, dass du mit dem Request weitermachen musst.

Da du jetzt in die unbequeme Position kommst, das HTTP-Protokoll nachzuprogrammieren, empfehle ich dir lieber auf den HttpClient auszuweichen und diesen für den Upload zu verwenden. Dieser ist im Android-Framework bereits integriert.


----------

