使用casbah / salat从GridFS提供文件

时间:2013-05-31 19:27:54

标签: mongodb scala gridfs casbah

我想将用户内容上传的图像存储在Scala Play 2应用程序的GridFS中。如何从GridFSDBFile给我的GridFS.findOne恢复二进制文件?

1 个答案:

答案 0 :(得分:0)

您可以通过流式传输其内容并设置正确的http标头来提供文件 - 这样做的一个示例是here

def getPhoto(file: ObjectId) = Action {
  import com.mongodb.casbah.Implicits._

  val gridFs = salat.gridFS("photos")

  gridFs.findOne(Map("_id" -> file)) match {
    case Some(f) => SimpleResult(
      ResponseHeader(OK, Map(
        CONTENT_LENGTH -> f.length.toString,
        CONTENT_TYPE -> f.contentType.getOrElse(BINARY),
        DATE -> new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss 'GMT'", java.util.Locale.UK).format(f.uploadDate)
      )),
      Enumerator.fromStream(f.inputStream)
    )

    case None => NotFound
  }
}

但是,这通常不是提供文件的最佳选择。文件系统旨在实现这一目标或将url root置于缓存之后 - 例如清漆或部署到cdn通常是更好的选择。