2017-06-23 3 views
1

リモートファイルからバイト配列を取得しようとしています。私はAsyncStreamを作成しましたが、適切なバイト配列に変換する方法はありません。Finagle Httpクライアントでファイルをダウンロード

val client: Service[http.Request, http.Response] = 
    Http 
     .client 
     .withStreaming(enabled = true) 
     .newService("www.scala-lang.org:80") 

    val request = http.Request(http.Method.Get, "/docu/files/ScalaOverview.pdf") 
    request.host = "scala-lang.org" 
    val response: Future[http.Response] = client(request) 

    def fromReader(reader: Reader): AsyncStream[Buf] = 
    AsyncStream.fromFuture(reader.read(Int.MaxValue)).flatMap { 
     case None => AsyncStream.empty 
     case Some(a) => a +:: fromReader(reader) 
    } 

    val result: Array[Byte] = 
    Await.result(response.flatMap { 
     case resp => 
     fromReader(resp.reader) ??? // what to do? 
    }) 

答えて

2

あなたはfromReaderAsyncStreamはすでにそれを持っている必要はありません。

val result: Future[Array[Byte]] = response 
    .flatMap { resp => 
    AsyncStream.fromReader(resp.reader) 
     .foldLeft(Buf.Empty){ _ concat _ } 
     .map(Buf.ByteArray.Owned.extract) 
    } 
1

使用scalajファイルをダウンロードするため: だから、あなたはこのような何かを行うことができます。

import scalaj.http._ 

val response: HttpResponse[String] = Http("http://foo.com/search").param("q","monkeys").asString 

https://github.com/scalaj/scalaj-http

+0

ポストなど、要求の異なるタイプの資料を入手このツールのおかげを参照してください。 –

関連する問題