Playframework 玩框架:文件上传后不提供,直到播放干净
如果我在生产模式下将文件上载到文件系统(到公共资产目录),则之后不会提供该文件。我需要运行clean命令。我得到一个找不到文件的错误。我怎样才能避免这种情况呢?我不喜欢这个答案,但要做到这一点是不容易的 因为“”。(我不同意这一点,但这是事实)Playframework 玩框架:文件上传后不提供,直到播放干净,playframework,playframework-2.0,Playframework,Playframework 2.0,如果我在生产模式下将文件上载到文件系统(到公共资产目录),则之后不会提供该文件。我需要运行clean命令。我得到一个找不到文件的错误。我怎样才能避免这种情况呢?我不喜欢这个答案,但要做到这一点是不容易的 因为“”。(我不同意这一点,但这是事实) 最好的解决方案是将文件存储在数据库中,或将其上载到另一个服务(如S3)。我添加了一个自定义资产控制器,现在它似乎工作正常: package customcontrollers import controllers.Assets import play.
最好的解决方案是将文件存储在数据库中,或将其上载到另一个服务(如S3)。我添加了一个自定义资产控制器,现在它似乎工作正常:
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))
}
}
虽然作为操作结果发送文件是可能的(您已经证明了这一点),但我建议将公共上传存储在应用程序之外,并使用公共HTTP服务器提供服务 原因很简单:
- 如果您需要快速添加/替换文件,可以使用通用FTP客户端来完成
- 如果使用第三方客户端添加文件,则无需重新部署应用程序
- HTTP服务器提供静态文件的速度更快,它可以开箱即用地管理缓存头(因为这是它的工作)等等。服务器不需要将文件重写为结果
- 为此使用子域,您可以创建一个'la CDN解决方案
- 应用程序的代码只是更小