2013-04-28 57 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也支持異步回調,但這適用於您的示例以顯示缺少的內容。

相關問題