1

我想在 scala 程序中下载给定 url 的图像。我正在尝试执行以下操作,但我能找到的所有调度程序示例都在谈论文本,而不是数据流。谁能指出我使用调度从 url 下载二进制文件的示例?如果我尝试直接使用 img,编译器会拒绝 Future。

我正在尝试执行的任务是检索 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)
  }

我收到以下编译器错误

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

我也试过

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

这导致

Exception being returned to browser when processing /oauth/welcome java.nio.charset.MalformedInputException: Input length = 1
4

1 回答 1

5

Dispatch 正在为您返回 a FutureArray[Byte]因此您需要应用 Future 才能获得Array[Byte]. 尝试更改以下行:

val img = Http(svc OK as.Bytes)()

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

于 2013-04-28T12:03:46.757 回答