如何从gridfs读取文件到数组字节?

时间:2016-08-28 22:47:20

标签: mongodb scala gridfs reactivemongo

我想从Enumerator [Array [Byte]]获取Array / List [Byte]。一些文章告诉我如何在playframework中做到这一点。但是我没有在这个项目中使用play框架。这就是我所拥有的:

      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 个答案:

答案 0 :(得分:1)

使用Play Iteratees并非特定于Play应用程序,而是流式传输,如Akka Stream或RxStuff。

您可以使用Iteratee.consume消耗此类枚举器的所有块。

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

出于显而易见的原因,它建议不要使用大数据,而是使用适当的Iteratee以流方式处理数据。