我有一个处理用户上传的图像文件的播放应用。应用程序必须不断向不同用户提供这些图像文件(将其视为Instagram的一个非常简单的版本)。
由于这是一个原型,我决定降低成本,而不是使用像Amazon S3这样的服务,只需在服务器上本地存储和提供这些图像文件。
我的问题是,如何将这些图像文件存储在ubuntu服务器内的某个位置,当我推出升级到这个游戏网络应用程序时,该位置将保持不变?在过去,我在Web应用程序的父文件夹中使用了符号链接,这样webapp本身就可以简单地写入Web应用程序控制器内的本地文件夹(例如。/images
),这将是一个指向某个东西的链接比如/var/images
,但有些事情告诉我这不是最好的做事方式。
有什么建议吗?感谢。
答案 0 :(得分:2)
您可以在任何位置存储图片,只需创建操作即可从不同位置投放这些资源,例如:
object Images extends Controller {
def getImage( file: String) = Action {
val image = new File(Play.current.configuration.getString("images.directory").getOrElse("")+File.separator+file)
Ok.sendFile(image)
}
}
images.directory是一个指向文件系统目录的属性,它在application.conf文件中定义
将新资源添加到路径文件
GET /images/*file controllers.Images.getImage(file:String)
答案 1 :(得分:0)
对于这种情况,我总是建议使用额外的HTTP服务器来提供图像(以及其他静态资产,甚至是应用程序的样式和图形),它总是比Play更少的资源,并且可能会更快一些,因为你不需要需要每次使用控制器重写图像到浏览器。
然后Play只保留另一台服务器上文件的路径并呈现主应用程序视图。
当您使用单独的域名(不仅是子域名)时,您还可以节省转账费用,因为浏览器不会发送Cookie。
其他好处是您可以在不同的机器(即亚马逊或某些专业CDN)之间移动文件,您只需在移动过程中更改数据库中的路径。