2016-08-28 19 views
0

Enumerator [Array [Byte]]からArray/List [Byte]を取得します。いくつかの記事は、プレイフレームワークでそれを行う方法を私に示しています。しかし、私はこのプロジェクトにプレーフレームワークを使用していません。これは私が持っているものです。Iterateesを再生利用しファイルをgridfsから配列バイトに読み込む方法は?

 lazy val gridfs = GridFS[BSONSerializationPack.type](db, "resource") 
     gridfs.find(BSONDocument("_id" -> BSONObjectID(id))).headOption.map{ 
     case Some(file) => { 
      //this gives me Enumerator[Array[Byte]]. 
      //I'm not using playframework, how to get Future[Array[Byte]] from here? 
      gridfs.enumerate(file) 
     } 
     } 

答えて

1

は、アプリをプレイするために特定のものではなく、ストリーミングに、アッカストリームまたはRxStuffのように。

Iteratee.consumeを使用すると、そのような列挙子のすべてのチャンクを消費することができます。

val sink: Iteratee[Array[Byte], Array[Byte]] = Iteratee.consume[Array[Byte]]() 
val allInMem: Future[Array[Byte]] = enumerator |>>> sink 

は明白な理由のためには、ビッグデータを消費するのではなく、ストリーミング方法でデータを処理するために、適切なIterateeを使用しないrecommandedです。

+0

私は実際には、一度にファイル全体を取得する方法と、ストリームに書き込む方法の2つの方法があります。 EnumeratorをInputStreamに変換する例を書いてもよろしいですか?ありがとう。 –

+0

心配しないで、私はそれをEnumerator [Array [Byte]]として保持し、必要なときに消費すると思います。 –

関連する問題