如何在生产中为新的公共资产提供服务?

时间:2019-04-03 10:17:53

标签: playframework playframework-2.6

我的Play应用程序在运行时会生成一些文件,我希望能够将这些文件作为公共资产来访问。

我试图将它们放在公共文件夹中,该文件夹由

提供
GET    /assets/*file    controllers.Assets.at(path="/public", file)

但是我无法获取这些文件。看来服务器仅能提供在构建过程中打包的文件。

我还尝试按照另一篇文章中的建议在build.sbt中添加以下行:

import com.typesafe.sbt.packager.MappingsHelper._
    mappings in Universal ++= directory(baseDirectory.value / "public")

这样,我可以看到公用文件夹中的所有打包资产,但是服务器仍然不提供在运行时添加的新文件。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

Playframework将公用文件夹打包到jar文件中,并在提供资产时使用它。因此,您无法在运行时在此处添加某些内容。

https://www.playframework.com/documentation/2.6.x/AssetsOverview#How-are-public-assets-packaged

  

在构建过程中,将处理公用文件夹的内容并将其添加到应用程序类路径中。

     

打包应用程序时,该应用程序的所有资产(包括所有子项目)都聚集在target / my-first-app-1.0.0-assets.jar中的单个jar中。该jar包含在分发中,因此您的Play应用程序可以为他们提供服务。该jar也可以用于将资产部署到CDN或反向代理。

您需要创建文件上传器(您已经创建过)和“文件控制器”(也称为“资产控制器”)。像

def file(name: String) = Action {
  Ok.sendFile(new java.io.File("/uploaded/" + name))
}

更多内容:https://www.playframework.com/documentation/2.6.x/ScalaStream#Serving-files