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

问题描述 投票:1回答:1

我的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个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.