8

Java Http リクエストでは、これを実行してマルチパート HTTP POST を作成できます。

HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);

FileBody bin = new FileBody(new File(fileName));
StringBody comment = new StringBody("Filename: " + fileName);

MultipartEntity reqEntity = new MultipartEntity();
reqEntity.addPart("bin", bin);
reqEntity.addPart("comment", comment);
httppost.setEntity(reqEntity);

HttpResponse response = httpclient.execute(httppost);
HttpEntity resEntity = response.getEntity();

WS.url または WS.WSRequest を使用して同じことを達成するにはどうすればよいですか?

WSRequestHolder wsReq = WS.url("http//url");            
wsReq.setHeader("Content-type", "multipart/form-data");
4

6 に答える 6

3

今のところ、外部ライブラリに依存しない唯一の解決策は、マルチパート フォーム データ リクエストを手動で作成することのようです。これは、次を使用して実行する方法の例ですplay.libs.WS.url

WSRequestHolder wsRequestHolder = WS.url(URL);

String boundary = "--XYZ123--";

String body = "";
for (String key : data.keySet()) {
  body += "--" + boundary + "\r\n"
       + "Content-Disposition: form-data; name=\""
       + key + "\"\r\n\r\n"
       + data.get(key) + "\r\n";
}
body += "--" + boundary + "--";

wsRequestHolder.setHeader("Content-Type", "multipart/form-data; boundary=" + boundary);
wsRequestHolder.setHeader("Content-length", String.valueOf(body.length()));

wsRequestHolder.post(body);

datajava.util.Map<String, String>フォーム パラメータとして渡したいすべての名前と値のペアを含む になります。randomString要求ごとに境界を変更するためのランダム化された値です。バイナリ データの追加も同じように機能します。

このhttp://www.htmlcodetutorial.com/forms/form_enctype.htmlは、仕様を理解するために参照するのに適した場所です。

于 2014-05-27T16:49:42.890 に答える
0

play API ドキュメントに基づくと、マルチパート POST ボディ用のビルトインはないようです。

ただし、メソッドを使用して独自のマルチパート ボディを作成できる場合があります。

post[T](body: T)(implicit wrt: Writeable[T], ct: ContentTypeOf[T]): Future[Response]

選択したタイプ T と、対応する Writeable および ContentTypeOf タイプも使用します。

しかし、これはマルチパート ボディが HTTP でどのように機能するかを掘り下げることを意味します。

于 2013-02-13T10:17:48.030 に答える