Scala 播放:其他公共/资产目录

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

为了有一个干净的目录结构,我想公开一个额外的资产文件夹。我在项目文件夹中创建了一个目录“assets”,编写了一个与“controller.assets”几乎相同的“PictureAssets”控制器,将“assets”添加到build.sbt中的playAssetsDirectories中,并尝试遵循一些路由条目,但没有成功

图片集:

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)