从Web应用程序本地存储和提供用户上传的图像文件

时间:2013-11-23 16:56:08

标签: ubuntu playframework playframework-2.0

我有一个处理用户上传的图像文件的播放应用。应用程序必须不断向不同用户提供这些图像文件(将其视为Instagram的一个非常简单的版本)。

由于这是一个原型,我决定降低成本,而不是使用像Amazon S3这样的服务,只需在服务器上本地存储和提供这些图像文件。

我的问题是,如何将这些图像文件存储在ubuntu服务器内的某个位置,当我推出升级到这个游戏网络应用程序时,该位置将保持不变?在过去,我在Web应用程序的父文件夹中使用了符号链接,这样webapp本身就可以简单地写入Web应用程序控制器内的本地文件夹(例如。/images),这将是一个指向某个东西的链接比如/var/images,但有些事情告诉我这不是最好的做事方式。

有什么建议吗?感谢。

2 个答案:

答案 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)之间移动文件,您只需在移动过程中更改数据库中的路径。