0

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

4

1 回答 1

0

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

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 根放在缓存后面 - 例如清漆或部署到 cdn 通常是更好的选择。

于 2013-06-12T13:43:23.393 回答