播放:二进制Web服务响应

Son*_*123 6 web-services scala playframework-2.0

我必须调用一个webservice,它给我一个二进制文件的内容.我只想将相同的内容返回给我的控制器的调用者:

val blobPromise = WS.url("http://url/to/webservice/file.txt").get()
Async {
  blobPromise.map(f => Ok(f.body))
}
Run Code Online (Sandbox Code Playgroud)

这适用于文本文件,但二进制文件将被破坏.我在这做错了什么?(也许f.body是将Web服务的二进制结果编码为String?但是如何获取原始数据呢?)

我知道,对于大文件来说这不是一个好方法 - 我已经在Play文档中读到了有关Streaming HTTP响应的内容,但对于我来说,作为Play框架的初学者,这似乎很复杂.

rjs*_*ean 8

您可以使用获取原始数据f.ahcResponse.gerResponseBodyAsBytes.但我认为,这会将整个响应加载到内存中,这是低效的.

您可以使用播放的流媒体功能!很容易提供这样的:

Async {
  WS.url("http://url/to/webservice/file.txt").get().map(response => {
    val asStream: InputStream = response.ahcResponse.getResponseBodyAsStream
    Ok.stream(Enumerator.fromStream(asStream))
  })
}
Run Code Online (Sandbox Code Playgroud)