如果我在生产模式下将文件上传到文件系统(到公共资产目录),则以后不会提供该文件。我需要运行clean命令。我收到文件未找到错误。我怎样才能避免这种情况?
问问题
1214 次
3 回答
3
尽管可以将文件作为操作的结果发送(您证明了),但我建议将公共上传存储在应用程序之外并使用通用 HTTP 服务器提供服务。
原因很简单:
- 如果您需要快速添加/替换文件,您可以使用普通的 FTP 客户端来完成
- 如果您使用第 3 部分客户端添加文件,则无需重新部署您的应用程序
- HTTP 服务器更快地提供静态文件,它开箱即用地管理缓存标头(因为这是它的工作)等。服务器不需要将文件重写为结果。
- 为此使用子域,您可以创建一个'la CDN解决方案
- 应用程序的代码更小
于 2013-01-05T14:56:00.310 回答
3
我不喜欢这个答案,但没有办法轻松实现。
因为,“这不是一种很好的做事方式,不可靠,无法扩展,并且存在安全问题”。(我不同意这一点,但这是事实)。
最好的解决方案是将文件存储在数据库中,或者将其上传到另一个服务,如 S3。
于 2013-01-05T13:46:10.017 回答
0
我添加了一个自定义资产控制器,现在它似乎可以正常工作:
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))
}
}
于 2013-01-05T14:42:36.203 回答