加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

从Play 2 Scala控制器提供静态/公共/文件

发布时间:2020-12-16 09:52:56 所属栏目:安全 来源:网络整理
导读:从 Play Framework 2 Scala控制器提供静态文件的首选方法是什么? 该文件与我的应用程序捆绑在一起,因此无法将文件系统绝对/路径/硬编码到/ /文件,因为它的位置取决于Play应用程序恰好安装的位置. 该文件放在public / dir中,但不在app / assets /中,因为我不
从 Play Framework 2 Scala控制器提供静态文件的首选方法是什么?

该文件与我的应用程序捆绑在一起,因此无法将文件系统绝对/路径/硬编码到/ /文件,因为它的位置取决于Play应用程序恰好安装的位置.

该文件放在public / dir中,但不在app / assets /中,因为我不希望Play编译它.

(我不是简单地添加到该文件的路由的原因是,在访问该文件之前需要登录,否则它是没用的.)

这是我到目前为止所做的,但这在我的生产服务器上打破了.

object Application ...

  def viewAdminPage = Action ... {
    ... authorization ...
    val adminPageFile = Play.getFile("/public/admin/index.html")
    Ok.sendFile(adminPageFile,inline = true)
  }

在我的路线文件中,我有这一行:

GET / – / admin / controllers.Application.viewAdminPage

问题是在我的生产服务器上,会发生以下错误:
FileNotFoundException:app1 / public / admin / index.html

是否有其他方法,而不是Play.getFile和OK.sendFile,以指定要提供的文件?生产中从未打破过?

(我的应用程序安装在/ some-dir / app1 /中,我从/ some-dir /(没有app1 /)启动它 – 如果我从/ some-dir / app1 /启动应用程序,也许一切都会正常工作.但是我我想知道一个“应该”如何做,从控制器内部提供一个静态文件?这样一切都可以在生产服务器上运行,无论我从哪里开始启动应用程序)

解决方法

Play有一个内置的方法:

Ok.sendResource("public/admin/file.html",classLoader)

您可以使用environment.classLoader或this.getClass.getClassLoader从注入的Environment获取类加载器.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读