2016-05-27 5 views
0

In Postman Post Formulardaten zu einer API auf Play2 Framework gebaut. Jetzt möchte ich diesen Aufruf in einem anderen API-Build auf dem play2-Framework machen.Post-Datei in Formulardaten mit JavaWS

ws.url(url).setContentType("application/x-www-form-urlencoded") 
     .post("key1=value1&key2=value2"); 

kann verwendet werden, um Formulardaten einzureichen, aber wie füge ich eine Datei zur gleichen Anfrage hinzu?

Mit Spiel Rahmen 2.4.x

+0

Sind Sie versuchen, Formulardaten und Datei im selben Antrag zu stellen? Oder Sie möchten nur eine Datei senden? – Salem

+0

"versucht, Formulardaten UND Datei in derselben Anfrage einzureichen" - ja. justlike im Briefträger zum Beispiel – Anirudh

Antwort

1

Im play website, können Sie den folgenden Code für Sie zu implementieren, was Sie wollen. Beachten Sie, dass das Dokument für Play-Version von 2.5.X ist

import play.mvc.Http.MultipartFormData.*; 

//the file you want to post 
Source<ByteString, ?> file = FileIO.fromFile(new File("hello.txt")); 

//generate the right format for posting 
FilePart<Source<ByteString, ?>> fp = new FilePart<>("hello", "hello.txt", "text/plain", file); 

DataPart dp = new DataPart("key", "value");// the data you want to post 

ws.url(url).post(Source.from(Arrays.asList(fp, dp))); 

Update: Das erste, was Sie wissen sollten ist, dass ws auf com.ning.http.AsyncHttpClient gebaut wird. Wie sich Play Document, bezieht, unterstützt die ws von play 2.4.* Multi-Form-Upload nicht direkt. Sie können den zugrunde liegenden Client AsyncHttpClient mit RequestBuilder.addBodyPart verwenden. Der folgende Code kann Erfüllung, was Sie wollen

import com.ning.http.client.AsyncHttpClient 
import com.ning.http.client.multipart.FilePart 

AsyncHttpClient myClient = ws.getUnderlying(); 
FilePart myFilePart = new FilePart("myFile", new java.io.File("test.txt")) 
myClient.preparePut("http://localhost:9000/index").addBodyPart(filePart).execute.get() 

haben ein gutes Glück

+0

Sorry, ich vergaß zu erwähnen, dass ich mit spielen 2.4.X .. – Anirudh

+0

die 'ws' des Spiels 2.4.x nicht unterstützt Multi-Form Upload, aber Sie können diese Funktion mit Hilfe von' erfüllen AsyncHttpClient'. Ich habe die Antwort aktualisiert und ich habe es mit Scala versucht, es funktioniert – Jerry