Hallo allerseits,
ich möchte von meiner App ein paar POST-Daten an einen Server schicken.
Die Daten bestehen aus ein paar Parametern und einem ByteArray, das einen beliebigen Inhalt haben kann.
Der Inhalt des ByteArrays ist beispielsweise eine Bitmap.
Diese soll auf dem Server unter dem angegebenen Namen new_fn gespeichert werden.
Ich bekomme das allerdings nicht hin.
Was funktioniert:
Aufbau einer Verbindung und Übertragung der POST-Parameter an den Server; diese werden korrekt empfangen, der Server quittiert den Empfang auch mit einem ResponseCode 200.
Was nicht funktioniert:
Der Server schreibt kein File; ich nehme an, es werden auch keine Daten empfangen; jedenfalls gibt im PHP-Code eine Abfrage beispielsweise von $_FILES['file']['type'] keine Ausgabe - es sollte mime=image/png sein.
Der PHP-Code zum Speichern des Files lautet
Der zugehörige Java-Code wirft keine Fehler; SERVERURL stimmt, "magic" und "fn"(= String new_fn, der Filename) kommen beim Server an, mime ist korrekt, und ByteArrayOutputStream outStream sind ca. 100 kB (im Test eine Bitmap im PNG-Format).
ZitatAlles anzeigenHttpURLConnection conn = null;
DataOutputStream dos = null;
URL url = new URL(SERVERURL);
conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true); // Allow Inputs
conn.setDoOutput(true); // Allow Outputs
conn.setUseCaches(false); // Don't use a Cached Copy
conn.setRequestMethod("POST");
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("ENCTYPE", "multipart/form-data");
conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=*****");
dos = new DataOutputStream(conn.getOutputStream());
dos.writeBytes("--*****\r\n");
dos.writeBytes("Content-Disposition: form-data; name=\"magic\"\r\n\r\n");
dos.writeBytes("aref\r\n");
dos.writeBytes("--*****\r\n");
dos.writeBytes("Content-Disposition: form-data; name=\"fn\"\r\n\r\n");
dos.writeBytes(new_fn +"\r\n");
dos.writeBytes("--*****\r\n");
// funktioniert bis hier. Jetzt der Fileupload
dos.writeBytes("Content-Disposition: file; filename=\"" + new_fn + "\r\n");
dos.writeBytes("Content-Type: " + mime + "\r\n");
dos.writeBytes("Content-Transfer-Encoding: binary\r\n\r\n");
dos.writeBytes(new String(outStream.toByteArray(), StandardCharsets.UTF_8));
dos.writeBytes("\r\n--*****--\r\n");
dos.flush();
dos.close();
if (conn.getResponseCode()!=200) Toast...
if (conn != null) conn.disconnect();
Falls jemanden interessiert, woher ich die Angaben zur Übertragung habe: https://www.w3.org/TR/html401/…ct/forms.html#h-17.13.4.2 (ganz unten).
Ich vermute, dass die Übergabe aus dem outStream nicht funktioniert, weiß aber nicht, wie die Zeile stattdessen lauten muss.
Jemand eine Idee?