玩!框架:上传后文件没有提供,直到播放干净

时间:2013-01-05 02:38:22

标签: playframework playframework-2.0

如果我在生产模式下将文件上传到文件系统(到 public assets目录),则之后不会提供该文件。我需要运行 clean 命令。我找不到文件错误。我怎么能避免这个?

3 个答案:

答案 0 :(得分:3)

虽然可以将文件作为操作结果发送(您证明了什么),但我建议将公共上传存储在应用程序之外并使用通用HTTP服务器提供。

原因很简单:

  • 如果您需要快速添加/替换文件,可以使用通用FTP客户端
  • 如果您要使用第三方客户端
  • 添加文件,则无需重新部署应用程序
  • HTTP服务器更快地提供静态文件,它开箱即用地管理缓存标题(导致它的工作)等。服务器不需要将文件重写为结果。
  • 使用子域名,您可以创建一个'CDN解决方案
  • app的代码更小

答案 1 :(得分:2)

我不喜欢这个答案,但是没有办法轻易实现这个目标。

因为,“it's not a very good way to do things, it is unreliable, it doesn't scale, and there are security concerns”。 (我不同意这一点,但这是事实)。

最佳解决方案是将您的文件存储在数据库中,或将其上传到S3等其他服务。

答案 2 :(得分:0)

我添加了一个自定义Assets控制器,现在它似乎正常工作:

package customcontrollers

import controllers.Assets
import play.api.mvc.Action
import play.api.mvc.AnyContent
import play.api.mvc.Results.Ok
import play.api.Play.current
import play.api._

object UploadedImageAssets {
  def at(file: String): Action[AnyContent] = Action {
    Ok.sendFile(Play.getFile("public/uploaded-images/"+file))
  } 
}