【发布时间】:2012-08-09 20:40:16
【问题描述】:
从Play Framework 2 Scala 控制器提供静态文件的首选方法是什么?
该文件与我的应用程序捆绑在一起,因此无法硬编码绝对文件系统 /path/to/the/file,因为它的位置取决于 Play 应用程序的安装位置。
文件放在 public/ 目录下,但不在 app/assets/ 下,因为我不想让 Play 编译它。
(我之所以不简单地为该文件添加路由,是因为需要先登录才能访问该文件,否则没有用。)
这是我到目前为止所做的,但这在我的生产服务器上中断了。
object Application ...
def viewAdminPage = Action ... {
... authorization ...
val adminPageFile = Play.getFile("/public/admin/index.html")
Ok.sendFile(adminPageFile, inline = true)
}
在我的routes 文件中,我有这一行:
GET /-/admin/ controllers.Application.viewAdminPage
问题是在我的生产服务器上,发生了这个错误:FileNotFoundException: app1/public/admin/index.html
除了Play.getFile 和OK.sendFile,还有其他方法来指定要提供的文件吗?这在生产中永远不会中断?
(我的应用程序安装在/some-dir/app1/ 中,我从/some-dir/ 启动它(没有app1/)——如果我从/some-dir/app1/ 启动应用程序,也许一切都可以工作。但我想知道如何一个“应该”做的,从控制器内部提供静态文件?这样,无论我碰巧从哪里启动应用程序,一切都可以在生产服务器上运行)
【问题讨论】: