2016-07-06 11 views
2

Я пытаюсь отправить файл и некоторые данные Mailgun с помощью PlayWS, но я получаю эту ошибку:PlayWS размещать многокомпонентные данные формы

Cannot write an instance of akka.stream.scaladsl.Source[play.api.mvc.MultipartFormData.Part[akka.stream.scaladsl.Source[akka.util.ByteString, Any]], Any] to HTTP response. Try to define a Writeable[akka.stream.scaladsl.Source[play.api.mvc.MultipartFormData.Part[akka.stream.scaladsl.Source[akka.util.ByteString, Any]], Any]] 

код выглядит следующим образом:

def ws(url: String) = 
    wsClient.url(s"${url}").withAuth("api", apiKey, WSAuthScheme.BASIC) 

ws(url).post(Source(
    FilePart("test", "test.txt", Option("text/plain"), FileIO.fromFile(file)) :: 
    DataPart("key", "value") :: 
    List())) 

Я знаю, что просила просить меня об этом, но я не знаю, как реализовать Writable для Source в этом случае. Разве это не должно быть предопределенной реализации?

+1

Не могли бы вы поделиться своими импортами в своем коде? Я пытаюсь сделать то, что вы делаете, и у меня возникают проблемы с созданием источника для сообщения таким образом, что он не говорит мне о создании записи. Используя 2.5.12 – EdgeCaseBerg

ответ

0

Он реализован, но только в 2.5.1+

0

AFAIK, это реализовано только начиная с Play 2.6.x (специально here, play-ws).

Возможны обходные пути для Play 2.5.x!

As documented here:

  • Для потокового Source, необходимо заключить его в StreamBody, as in:

    вал wsResponse: Future [WSResponse] = ws.url (URL) .withBody (StreamedBody (largeImageFromDB)) выполнить ("PUT")

  • To stream a MultiPart/form data:.

    ws.url (url) .post (Источник (FilePart («hello», «hello.txt», Option («text/plain»), FileIO.fromFile (tmpFile)) :: DataPart («ключ», значение ") :: Список()))