【问题标题】:How to serve new public assets in production?如何在生产中服务新的公共资产?
【发布时间】:2019-04-03 10:17:53
【问题描述】:

我的 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")

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

有什么想法吗?

【问题讨论】:

    标签: playframework playframework-2.6


    【解决方案1】:

    Playframework 将公用文件夹打包到jar 文件中,并在提供资产时使用它。所以你不能在运行时在这里添加一些东西。

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

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

    打包应用程序时,应用程序的所有资产(包括所有子项目)都会聚合到一个 jar 中,位于 target/my-first-app-1.0.0-assets.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

    【讨论】:

      最近更新 更多