отправка файла в данные формы с использованием JavaWS

В почтальоне я отправляю данные формы в API, построенный на платформе play2. Теперь я хочу сделать этот же вызов в другой сборке API на платформе play2.

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

можно использовать для отправки данных формы, но как добавить файл в тот же запрос?

Использование игровой платформы 2.4.X


person Anirudh    schedule 27.05.2016    source источник
comment
Вы пытаетесь отправить данные формы и файл в одном запросе? Или вы просто хотите отправить файл?   -  person Salem    schedule 27.05.2016
comment
попытка отправить данные формы И файл в том же запросе - да. как в почтальоне например   -  person Anirudh    schedule 27.05.2016


Ответы (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)));

обновление: первое, что вы должны знать, это то, что ws построен на com.ning.http.AsyncHttpClient. Как указано в Play Document, ws из play 2.4.* не поддерживает загрузку многокомпонентной формы. напрямую. Вы можете использовать базовый клиент AsyncHttpClient с RequestBuilder. .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()

удачи

person Jerry    schedule 27.05.2016
comment
ws игры 2.4.x не поддерживает загрузку многокомпонентной формы, но вы можете выполнить эту функцию с помощью AsyncHttpClient. Я обновил ответ и попробовал его со скалой, он работает - person Jerry; 28.05.2016