我有一个带有播放框架的Web应用程序。应用程序中使用的所有图像都保存在公共文件夹中,并在conf / route文件中定义的路由的帮助下访问。因此我使用的所有图像都在构建后存在于jar文件中。但我的要求是管理员将放置UI应该能够访问的少量图像。出于显而易见的原因,我可以让他们将图像添加到jar中。
我的计划是要求管理员将图像添加到conf文件夹内的文件夹中并使用路由从那里读取它(我相信它可能是因为目前有一个路由定义了从配置中读取json文件)。
# Home page
GET / controllers.Application.index
GET /clientConfig controllers.Application.clientConfiguration
GET /testImg controllers.Application.testImg
# Map static resources from the /public folder to the /assets URL path
GET /assets/*file controllers.Assets.versioned(path="/public", file: Asset)
作为Play框架的新手,我无法找到一种方法来定义路径并从conf文件夹内的文件夹中读取图像。任何帮助都非常感谢。
答案 0 :(得分:0)
conf文件夹是一个配置文件夹,因此将其公开为公用文件夹并不是一个好主意。例如,从安全角度来看,application.conf或数据库迁移文件包含不应在任何api端点上访问的敏感数据。
您可以做的是向公共托管资源添加其他根文件夹,例如在根文件夹中创建名为publicImages的文件夹,并将以下行添加到build.sbt
unmanagedResourceDirectories in Assets += baseDirectory.value / "publicImages"
另外请记住,将图像添加到已部署服务器上的文件夹意味着您无法进行群集,即在负载增加时添加其他节点。因此,您最好的选择是使用某些第三方存储服务,例如亚马逊s3(管理员将图像上传到s3上的文件夹非常简单)
如果您坚持将图像添加到conf文件夹,您可以做的是创建一个标准控制器,在其参数(路径)中接受文件名,并使用conf文件夹中的文件内容流
Play.getFile('conf/{myfile}')
只需确保执行一些安全约束,例如验证没有提供路径,以便恶意用户无法遍历计算机的文件系统。并且仅支持预定义的“安全”。文件类型,如图像。
答案 1 :(得分:0)
正如LiorH所说,将conf文件夹暴露给公众通常不是一个好主意。但如果这真的是你想要的,那么你可以尝试实现自己的控制器。
在route
文件中:
GET /configuration ConfController.loadConf(path)
在ConfController
:
def loadConf(path: String) = Action {
Ok.sendFile(Play.getFile("conf$path"))
}