我想将作为用户内容上传的图像存储GridFS
在 Scala Play 2 应用程序中。如何从给我的文件中恢复二进制GridFSDBFile
文件GridFS.findOne
?
问问题
437 次
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 回答