[JAVA] Files uploaden wie mit WebClient

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Byte.

    [JAVA] Files uploaden wie mit WebClient

    Hallo Community-User,

    Nach langer Google-Suche bin ich diesmal leider nicht weitergekommen...

    Ich suche eine Möglichkeit, in Java eine Datei upzuloaden, sowas wie webclient.UploadFile(..).

    Hat jemand Vorschläge, Tipps & Links?

    Danke,
    Byte
    Habe jetzt folgenden Code gefunden:

    Java-Quellcode

    1. import java.io.*;
    2. import java.net.*;
    3. public class test
    4. {
    5. public test() throws Exception
    6. {
    7. String data = URLEncoder.encode("test", "UTF-8") + "=" + URLEncoder.encode("ok", "UTF-8");
    8. // Create a socket to the host
    9. String hostname = "fileload.bplaced.net";
    10. int port = 80;
    11. InetAddress addr = InetAddress.getByName(hostname);
    12. Socket socket = new Socket(addr, port);
    13. // Send header
    14. String path = "api.php";
    15. BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF8"));
    16. wr.write("POST "+path+" HTTP/1.0\r\n");
    17. wr.write("Content-Length: "+data.length()+"\r\n");
    18. wr.write("Content-Type: application/x-www-form-urlencoded\r\n");
    19. wr.write("\r\n");
    20. // Send data
    21. wr.write(data);
    22. wr.flush();
    23. // Get response
    24. BufferedReader rd = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    25. String line;
    26. while ((line = rd.readLine()) != null)
    27. {
    28. System.out.println(line);
    29. }
    30. wr.close();
    31. rd.close();
    32. }
    33. public static void main(String[] args)
    34. {
    35. try
    36. {
    37. new test();
    38. } catch (Exception e)
    39. {
    40. e.printStackTrace();
    41. }
    42. }
    43. }


    wenn ich das ausführe bekomme ich immer die gleiche Fehlermeldung: 400, Bad Request.
    Wie kann ich das beheben?

    btw: Ich versuche posts oder files upzuloaden.

    LG
    Der Header stimmt glaube ich nicht so ganz, analysiere mal via LiveHeader was beim Upload alles gesendet wird, ich denke es liegt u.a. daran, das keine Boundarys angegeben hast.

    Allgemeiner Header

    Brainfuck-Quellcode

    1. Content-Type: multipart/form-data; boundary=---------------------------24626113235537
    2. Content-Length: [länge des Contents Datei + Werte


    Datei im POST Header

    Brainfuck-Quellcode

    1. -----------------------------24626113235537
    2. Content-Disposition: form-data; name="file"; filename="bild.jpg"
    3. Content-Type: image/jpeg
    4. Content-Transfer-Encoding: binary
    5. [Bytes of File]


    Variablen im POST Header

    Brainfuck-Quellcode

    1. ---------------------------24626113235537
    2. Content-Disposition: form-data; name="variablenname1"
    3. Wert


    Wichtig sind die Zeilenumbrüche der Leerzeilen, diese MÜSSEN so sein.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Dodo“ ()

    Ich kriegs irgendwie nicht, habs mit allen möglichen Headers, die du gerade gepostet hast, versucht.

    Brainfuck-Quellcode

    1. String path = "api.php";
    2. String vname = "test";
    3. BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF8"));
    4. wr.write("Content-Type: multipart/form-data; boundary=---------------------------24626113235537\r\n");
    5. wr.write("Content-Disposition: form-data; name=" + vname + "\r\n");
    6. wr.write("\r\n");
    7. wr.write("ok");
    8. // Send data
    9. wr.write(data);
    10. wr.flush();


    Also, damit wollte ich eine Post Variable verschicken.

    Aber eine Frage: Ich habe nirgendwo die Datei angegeben fällt mir auf, kann es daran liegen?

    LG
    Genau du schickst eine Variable und nach dem "ok" dann gleich wieder deine Datei, da fehlt aber wieder das Boundary und die Angaben für das File, aber lass das File doch erstmal außen vor und probiere nur eine Variable zu senden, im Script auslesen und wieder zurückgeben, dass sie mit dem Response wieder auslesen kannst in Java.
    Zudem fehlt die Content-Länge.


    Edit: vlt. probiere ichs später auch mal, aber momentan komme ich ggerade von Saturn und Crysis 2 liegt im Laufwerk und möchte gespielt werden *g*