我的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将公用文件夹打包到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