2013-04-28 55 views
1

我想在scala程序中下载给定url的图片。我正在尝试做类似以下的事情,但我可以找到有关文本的所有调度程序示例,而不是数据流。任何人都可以指向我使用dispatch从url下载二进制文件的例子吗?如果我尝试直接使用img关于Future的编译器barfs。如何通过scala获取二进制数据流?

我试图执行任务正在检索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 

回答

5

调度是为返回给你,所以你需要申请未来才能得到Array[Byte]。尝试改变下面一行:我添加了一个()到该行的末尾

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

通知。这将应用Future,阻止并等待结果。阻止并不理想,并且dispach Future也支持异步回调,但这适用于您的示例以显示缺少的内容。

相关问题