如何通过scala获取二进制数据流?
问题描述:
我想在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
答
调度是为返回给你,所以你需要申请未来才能得到Array[Byte]
。尝试改变下面一行:我添加了一个()
到该行的末尾
val img = Http(svc OK as.Bytes)()
通知。这将应用Future
,阻止并等待结果。阻止并不理想,并且dispach Future
也支持异步回调,但这适用于您的示例以显示缺少的内容。