我想将用户内容上传的图像存储在Scala Play 2应用程序的GridFS
中。如何从GridFSDBFile
给我的GridFS.findOne
恢复二进制文件?
答案 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通常是更好的选择。