2012-05-28 38 views
4

ellou”玩家直接提供文件服务

我需要箱子定制的小应用程序的目的​​式的解决方案,不知道什么是服务文件直接与发挥最好的办法,但在没有放置应用程序的public目录?我需要访问FTP上传文件夹。

假设我的应用程序是从/home/myaccount/playapps/app201文件夹运行的,并且地址为http://somedomain.tld。我也有一个文件夹指向/home/myaccount/ftp_upload的普通FTP帐户。

服务文件/home/myaccount/ftp_upload/folder_1/sub_2/file.txthttp://somedomain.tld/ftp_upload/folder_1/sub_2/file.txt(没有任何检查和限制)的最佳方式是什么?

  • 一种选择是使用HTTP服务器,并设置独立的ftp folderhostalias,但我想,以避免在某些节点上使用额外的服务器(参考:如果你正在寻找的服务器解决方案检查sample config)。
  • 其次是写作Application.serve(String filepath)动作+路由,但在提供文件之前我不需要任何其他操作。使用这种方法有意义吗?

有其他选择吗?

(这个问题也可在Google Groups

+1

我可以问一些尝试细节? CDN的部分有用性 - 至少在我看来 - 是你的请求不包含cookies,因为它填补了不必要的带宽。是您希望的解决方案的一部分,例如提供来自'www.example.com'的动态请求和来自'cdn.example.com'(或完全不同的TLD)的静态请求(CDN)?另外,你的大多数请求是静态的(CDN)还是动态的?也许你有一个大概的百分比。它也可以帮助您了解您的主要静态数据集是否很小,例如90%的静态请求最多只有几GB的数据。 – Carsten

+0

@Carsten,thx回复。我想将大型媒体文件和其他“完全公开”的东西放在应用程序结构之外,因为我不需要对它进行访问控制。在这种情况下,应用程序保存路径和元数据 - 以及corse渲染前端。我的目标可以通过使用前端http服务器和某些文件夹的别名(此处介绍)(http://stackoverflow.com/a/10884297/1066240)轻松演示,但我想避免使用HTTP服务器。另一方面,我认为我也可以在端口80和一些轻量级服务器上部署应用程序来捕获静态请求(将更多...) – biesior

+0

@Caresten :((更多:))我刚刚意识到(感谢你)从其他域提供这些数据将阻止cookie发送,这也可以提高性能。 – biesior

回答

2

如果您的播放文件夹和FTP文件夹是在同一台主机上,可以使用公共资产。来自documentation

请注意,如果您在“公开”之外定义资产映射,则需要告诉它,例如,如果你想:

GET /assets/*file    controllers.Assets.at("/public", file) 
GET /liabilities/*file   controllers.Assets.at("/foo", file) 

你应该project/Build.scala

​​

我没有测试它添加这个项目设置,但它是值得:-)

+0

nico_ekito:thx为您的答案,但不幸的是不能得到它的工作。我会尽力,如果有任何进展,会让你知道。 – biesior

+5

这是否需要您自己的控制器,因为资产控制器预先复制并编译了所有资产,即开始播放时文件必须存在?如果稍后上传文件,则不起作用。 – nylund