如何通过scala获取二进制数据流?

And*_*ell 1 facebook scala databinder

我想在scala程序中下载给定URL的图像.我正在尝试做类似以下的事情,但我可以找到有关文本而不是数据流的所有调度程序示例.有人能指出我使用调度从URL下载二进制文件的例子吗?如果我尝试直接使用img关于Future的编译器barfs.

我正在尝试执行的任务是检索Facebook个人资料图片.

  def copyUrl( uri : String ) : Array[Byte] = {
    val svc = url(uri)
    val img = Http(svc OK as.Bytes)
    for ( i <- img )  {
      println(i)
    }
    // something here but no idea
    img.map(_.toArray)
  }
Run Code Online (Sandbox Code Playgroud)

我得到以下编译器错误

ProfileImage.scala:31: type mismatch;
[error]  found   : scala.concurrent.Future[Array[Byte]]
[error]  required: Array[Byte]
[error]           img.map(_.toArray)
[error]                  ^
[error] one error found
Run Code Online (Sandbox Code Playgroud)

我也试过了

  def copyUrl( uri : String ) : Array[Byte] = {
    result = scala.io.Source.fromURL(uri).map(_.toByte).toArray
  }
Run Code Online (Sandbox Code Playgroud)

结果

Exception being returned to browser when processing /oauth/welcome java.nio.charset.MalformedInputException: Input length = 1
Run Code Online (Sandbox Code Playgroud)

cmb*_*ter 5

调度返回一个FutureArray[Byte]你,所以你需要应用的未来,以获得Array[Byte].尝试更改以下行:

val img = Http(svc OK as.Bytes)()
Run Code Online (Sandbox Code Playgroud)

请注意,我()在该行的末尾添加了一个.这将应用Future,阻止和等待结果.阻塞并不理想,并且dispach Future也支持异步回调,但这样做可以用于示例的目的,以显示缺少的内容.