0

postman では、play2 フレームワーク上に構築された API にフォーム データを投稿します。ここで、play2 フレームワークの別の API ビルドで同じ呼び出しを行いたいと考えています。

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

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

play フレームワーク 2.4.X の使用

4

1 に答える 1

1

play ウェブサイトで、必要なものを実装するための次のコードを見つけることができます。ドキュメントは 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)));

更新: 最初に知っておくべきことは、wsに基づいて構築されていることですcom.ning.http.AsyncHttpClientPlay Documentで言及されているように、wsplay 2.4.*はマルチパート フォームのアップロードを直接サポートしていません。RequestBuilder.addBodyPartで基礎となるクライアントAsyncHttpClientを使用できます。次のコードは、あなたが望むものを満たすことができます

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

幸運を祈ります

于 2016-05-27T17:02:13.833 に答える