2016-05-27 10 views
0

郵便局では、フォームデータをplay2フレームワーク上に構築されたAPIに投稿します。今私はplay2フレームワーク上の別のAPIビルドでこの同じ呼び出しをしたいと思います。JavaWSを使用してフォームデータにファイルを投稿

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

フォームデータの送信に使用できますが、同じリクエストにファイルを追加するにはどうすればよいですか?

play websiteでプレイフレームワーク2.4.X

+0

を持って欲しいもの履行することができますが、同じリクエストでフォームデータファイルを送信しようとしていますか?それとも、ファイルを提出したいだけですか? – Salem

+0

"同じ要求でフォームデータとファイルを送信しようとしています" - はい。 郵便配達員とちょうど同じ – Anirudh

答えて

1

を使用して、あなたが望むものを実装するために、次のコードを見つけることができます。文書は2.5.Xのプレイバージョンです 注

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))); 

更新:あなたが知っておくべき 最初はwscom.ning.http.AsyncHttpClient上に構築されていることです。 Play Documentを参照して、 wsplay 2.4.*は、マルチパート形式のアップロードを直接サポートしていません。基になるクライアントAsyncHttpClientRequestBuilder.addBodyPartと使用することができます。次のコードは、あなたが

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() 

は幸運

+0

申し訳ありません、再生2.4.X .. – Anirudh

+0

を使用していることを忘れてしまいました。 'ws'の再生2.4.xはマルチパート形式のアップロードをサポートしていませんが、この機能は' AsyncHttpClient'。私は答えを更新し、私はスカラでそれを試した、それは動作します – Jerry

関連する問題