Ste*_* K. 7 scala playframework playframework-2.0
为了拥有一个干净的目录结构,我想公开一个额外的资产文件夹.我在我的项目文件夹中创建了一个目录'assets',写了一个'PictureAssets'控制器,它几乎与'controller.Assets'相同,将'资产'添加到build.sbt中的playAssetsDirectories并尝试跟踪一些没有的路径条目成功.
PictureAssets:
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())
}
}
Run Code Online (Sandbox Code Playgroud)
build.sbt
playAssetsDirectories <+= baseDirectory / "assets"
Run Code Online (Sandbox Code Playgroud)
路线
# GET /file controllers.PictureAssets.at(path="/assets", file="MM1.png")
GET /datei/*file controllers.PictureAssets.at(path="/assets", file)
# GET /datei/*file controllers.Assets.at(path="/assets", file)
Run Code Online (Sandbox Code Playgroud)
如果我尝试访问该URL,则不会显示任何内容,或者显示错误"图像http:9000 // localhost/datei/MM1.png因为包含错误而无法显示"或css引用由'处理' controller.Assets'不再起作用了.
我错过了什么?
我认为问题来自于所at使用的方法是之前使用的默认方法Assets.
我在去年的某个时候碰到了同样的问题,我想要提供存储在外部文件夹中的图像,磁盘上的某个文件夹,这就是我编码的方式:
我创建了一个名为Photos的简单控制器,它包含一个Action:
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,在我的路线中,我定义了以下内容:
GET /photos/*file controllers.Photos.at(path="/absolute/path/to/photos",file)
Run Code Online (Sandbox Code Playgroud)
这对我来说很好.希望这可以帮助.
PS:这是Assets帮助提供js和css文件的普通控制器的补充.