Ich versuche, Java-Code zu schreiben, genau das zu tun, was dieser Befehl tut:Java Äquivalent curl Post Anfrage mit Bild und Text
curl -F "[email protected]" -F "param1=some-value" -F "param2=some_value" http://example.com
Ich bin derzeit so etwas wie dies versuchen:
HttpClient httpClient = HttpClientBuilder.create().build();
HttpPost poster = new HttpPost("http://example.com");
MultipartEntityBuilder mpEntityBuilder = MultipartEntityBuilder.create();
mpEntityBuilder.addPart("param1", new StringBody("some-value"));
mpEntityBuilder.addPart("param2", new StringBody("some-value"));
mpEntity.addPart("image", getImage("some-image"));
poster.setEntity(mpEntityBuilder .build());
HttpResponse response = httpClient.execute(poster);
Hier gibt getImage (String) ein ByteArrayBody zurück. (Ich lade tatsächlich ein Bild aus dem Internet im laufenden Betrieb anstatt vom Datenträger wie der Befehl curl lesen, aber ich denke nicht, dass dies einen Unterschied machen sollte)
Ich habe diesen Link überprüft es aber es nicht ' t genau den Fall ansprechen, wo man sowohl ein Bild als auch Text-Parameter sind zu senden: Java Equivalent of curl query
Was seltsam ist, dass ich fast den gleichen Code bin mit einem HTTP-Post an eine andere API zu machen, die gut funktioniert, wenn ich brauche um ein Bild ohne Textparameter zu senden. (no stringbody)
Aber wenn ich versuche, sowohl ein Bild (als ByteArrayBody) als auch Text (als StringBody) zu senden, bekomme ich eine kryptische Fehlermeldung vom Server, die so etwas sagt: 'Konnte nicht initialisiert das Parameterobjekt mit mimeType: application/octet-stream '. Es ist wahrscheinlich eine benutzerdefinierte Fehlermeldung, so dass ich nicht wirklich viele Informationen dazu finden kann.
Ich habe versucht, ein paar andere Bausteine für StringBody() zu verwenden, da dieser veraltet ist, aber es hat nicht geholfen. Nicht sicher, was der richtige Konstruktor zu verwenden ist, aber nicht sicher, ob dies ein Problem verursachen würde.
Edit: scheint, wie jemand fragte eine sehr ähnliche Frage vor, aber die Lösung funktioniert nicht für mich: Android: upload file with filling out POST body together Ich erhalte eine Fehlermeldung über Fehlgeschlagen Parameterinitialisierung mit mime: application/octet-stream)
Ich glaube, dass Sie Base64Encode das Bild codieren müssen. Werfen Sie einen Blick auf http://stackoverflow.com/questions/5416038/uploading-image-to-server-in-multipart-along-with-json-data-in-android – GreyBeardedGeek
Danke, ich werde es überprüfen. Aber es würde nicht erklären, warum der obige Code gut funktioniert, um zu tun, was dieser curl-Befehl macht: curl -F "Datei" = "@ example.png" "https://example.com" – kerouac