在播放框架中上传表单错误 413 请求实体太大
Posted
技术标签:
【中文标题】在播放框架中上传表单错误 413 请求实体太大【英文标题】:Upload Form in playframework error 413 request entity to large 【发布时间】:2016-01-30 21:54:07 【问题描述】:这也是他的控制器动作,我可以使这个异步(只是好奇)吗?
def upload = Action(parse.multipartFormData) request =>
request.body.file("picture").map picture =>
import java.io.File
val filename = picture.filename
val contentType = picture.contentType
picture.ref.moveTo(new File("/tmp/picture"))
Ok("File uploaded")
.getOrElse
Redirect(routes.Application.index).flashing(
"error" -> "Missing file"
)
路线
GET /admin/carro/upload controllers.AdminCarro.upload
模板
@import helper._
@main(new Main("Car Dealers", "Compra e venda de carros", "logo.png", "carro, compra, venda"))
<div class="container">
@form(routes.AdminCarro.upload, 'enctype -> "multipart/form-data")
<input type="file" name="picture">
<p>
<input type="submit">
</p>
</div>
这个 413 请求实体在没有发送任何文件或呈现任何内容的情况下发生。
【问题讨论】:
什么时候发生?您是否在没有文件的情况下向/admin/carro/upload
发送请求?
是的。这只是一个简单的请求来呈现页面表单,并没有显示只返回 413 错误。
【参考方案1】:
我不确定您这样做是为了达到什么目的。为什么不使用 GET
呈现视图并使用 POST
呈现上传:
def uploadView = Action.async request =>
Future.successful(Ok(views.html.uploadForm))
def upload = Action(parse.multipartFormData).async request =>
request.body.file("picture").map picture =>
import java.io.File
val filename = picture.filename
val contentType = picture.contentType
picture.ref.moveTo(new File("/tmp/picture"))
Future.successful(Ok("File uploaded"))
.getOrElse
Future.successful(Redirect(routes.Application.index).flashing(
"error" -> "Missing file"
))
还有路由文件:
GET /admin/carro/upload controllers.AdminCarro.uploadView
POST /admin/carro/upload controllers.AdminCarro.upload
此外,如果您要上传大文件,您可以为所有解析器指定 max Sixe:
parsers.text.maxLength=5242880
为了行动
Action(parse.text(maxLength = 1024 * 10))
【讨论】:
我习惯了 php,我可以在同一个 REQUEST 中简单地将 POST 与 GET 请求分开,而且没有问题。 :\ 好奇这对于 Java 和 JavaServlets 是否相同? 这不是一个错误,它是一个特性;)虽然在 PHP 请求方法中可以混合使用,但不建议这样做,因为它会损害安全性。事实上的开发人员应该期望每个请求都有精确的方法,这就是 Play 的工作方式(对于一个实例应用程序,如果没有定义 POST 路由,则返回 404,而不是forwarding
它到 GET) 出于品味,我更喜欢更安全的方法。在以前版本的 Play(分支 1.x)中存在一个通配符方法 *(星号),它代表 any 方法,无论如何,以安全的名义,它在 Play 中被避免2.x以上是关于在播放框架中上传表单错误 413 请求实体太大的主要内容,如果未能解决你的问题,请参考以下文章
413 请求实体太大 + Web 服务器连接已关闭 |错误 64