我的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")
这样,我可以看到公用文件夹中的所有打包资产,但是服务器仍然不提供在运行时添加的新文件。
有什么想法吗?
答案 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