Scala 播放:其他公共/资产目录
为了有一个干净的目录结构,我想公开一个额外的资产文件夹。我在项目文件夹中创建了一个目录“assets”,编写了一个与“controller.assets”几乎相同的“PictureAssets”控制器,将“assets”添加到build.sbt中的playAssetsDirectories中,并尝试遵循一些路由条目,但没有成功 图片集:Scala 播放:其他公共/资产目录,scala,playframework,playframework-2.0,Scala,Playframework,Playframework 2.0,为了有一个干净的目录结构,我想公开一个额外的资产文件夹。我在项目文件夹中创建了一个目录“assets”,编写了一个与“controller.assets”几乎相同的“PictureAssets”控制器,将“assets”添加到build.sbt中的playAssetsDirectories中,并尝试遵循一些路由条目,但没有成功 图片集: package controllers import play.api.mvc.Action import play.api.mvc.AnyContent
package controllers
import play.api.mvc.Action
import play.api.mvc.AnyContent
object PictureAssets extends AssetsBuilder {
def create : Action[AnyContent] = Action {
Ok(views.html.fileUploadForm())
}
}
build.sbt
playAssetsDirectories <+= baseDirectory / "assets"
如果我尝试访问URL,要么什么也不显示,要么显示错误“图像http:9000//localhost/datei/MM1.png因包含错误而无法显示”,要么“controller.Assets”处理的css引用不再起作用
我遗漏了什么?我认为问题来自这样一个事实,即使用的
at
方法是资产之前使用的默认方法
我在去年的某个时候遇到了同样的问题,我想提供存储在外部文件夹(磁盘上的某个文件夹)中的图像,下面是我如何编码的:
我创建了一个名为Photos的简单控制器,其中包含一个操作:
object Photos extends Controller {
val AbsolutePath = """^(/|[a-zA-Z]:\\).*""".r
/**
* Generates an `Action` that serves a static resource from an external folder
*
* @param absoluteRootPath the root folder for searching the static resource files.
* @param file the file part extracted from the URL
*/
def at(rootPath: String, file: String): Action[AnyContent] = Action { request =>
val fileToServe = rootPath match {
case AbsolutePath(_) => new File(rootPath, file)
case _ => new File(Play.application.getFile(rootPath), file)
}
if (fileToServe.exists) {
Ok.sendFile(fileToServe, inline = true)
} else {
Logger.error("Photos controller failed to serve photo: " + file)
NotFound
}
}
}
然后,在我的路线中,我定义了以下内容:
GET /photos/*file controllers.Photos.at(path="/absolute/path/to/photos",file)
这对我来说很好。希望这有帮助
PS:这是对帮助服务js和css文件的正常资产控制器的补充。谢谢,我不得不使用val fileToServe=new File(Play.application.getFile(rootPath),File)
作为相对路径,在我的例子中。@Peter我将其移植到Java,并且成功:)谢谢。如果在绝对路径的文件夹中有大量图像,这种比例是否会增加?
GET /photos/*file controllers.Photos.at(path="/absolute/path/to/photos",file)