PlayWS发布多部分表单数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PlayWS发布多部分表单数据相关的知识,希望对你有一定的参考价值。

我正在尝试使用PlayWS将文件和一些数据发布到Mailgun,但我收到此错误:

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。这不应该有预定义的实现吗?

答案

它已实现,但仅限于2.5.1+

另一答案

AFAIK,这只是从Play 2.6.x(特别是here, play-ws)开始实现的。

虽然Play 2.5.x有变通方法!

As documented here

  • 要流式传输Source,您需要将其封装在StreamBodyas in中:

val wsResponse: Future[WSResponse] = ws.url(url) .withBody(StreamedBody(largeImageFromDB)).execute("PUT")

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

以上是关于PlayWS发布多部分表单数据的主要内容,如果未能解决你的问题,请参考以下文章

在 iphone 中使用多部分表单数据发布图像和其他数据

使用 Objective-C 发布多部分/表单数据

使用 Undertow 的多部分表单数据示例

Alamofire 2.0 多部分表单数据错误

正确读取多部分表单数据流(NodeJS)

如何从反应提交多部分/表单数据到表达?