Play框架2.0中的最大文件上载大小

时间:2012-07-04 10:43:36

标签: playframework-2.0

当我在播放框架2.0 中上传大文件(大于1 MB)时,我得到了

“413请求实体太大”错误。

你能不能请任何人建议如何摆脱这个?

谢谢,

更新 我已经通过将其添加到application.conf

解决了这个问题 #Set最大文件大小

parsers.MultipartFormData.maxLength = 10240K

5 个答案:

答案 0 :(得分:18)

请参阅http://www.playframework.com/documentation/2.0.x/ScalaBodyParsers

或Java版本:http://www.playframework.com/documentation/2.0.x/JavaBodyParsers

提取物:

// Accept only 10KB of data.
def save = Action(parse.text(maxLength = 1024 * 10)) { request =>
  Ok("Got: " + text)
}

您可以使用application.confparsers.text.maxLength中配置此内容。

答案 1 :(得分:16)

parse.multipartFormDataparse.temporaryFile不会将maxLength作为参数,让您增加或减少parse.text(maxLength)之类的默认值。

但您可以改为使用parse.maxLength(maxLength, wrappedBodyParser)

// accepts 10 MB file upload
def save = Action(parse.maxLength(10 * 1024 * 1024, parse.multipartFormData)) { request =>
    request.body match {
        case Left(MaxSizeExceeded(length)) => BadRequest("Your file is too large, we accept just " + length + " bytes!")
        case Right(multipartForm) => {
            /* Handle the POSTed form with files */
            ...
        }
    }
}

答案 2 :(得分:10)

对于播放版本2.4.x:

  

对于缓冲磁盘上内容的解析器,例如原始解析器或multipart / form-data,使用 play.http.parser.maxDiskBuffer 属性指定最大内容长度,默认为10MB。 multipart / form-data解析器还为数据字段的聚合强制执行text max length属性。

https://www.playframework.com/documentation/2.4.x/ScalaBodyParsers

答案 3 :(得分:4)

在我的情况下,我收到了一个AJAX请求的错误(这是一个很长的文本)。对于这样的请求,您可以设置属性:

<强> parsers.text.maxLength = 1024K

有关播放文档的更多信息:https://www.playframework.com/documentation/2.0/JavaBodyParsers

答案 4 :(得分:0)

我正在使用AnyContent解析器。由于配置对我不起作用,我不得不更改为controller代码,以遵循以下条件

 def newQuestion = silhouette.SecuredAction.async(parse.maxLength(1024 * 1024, parse.anyContent)(ActorMaterializer()(ActorSystem("MyApplication")))) { 
    implicit request => {
      println("got request with body:" + request.body)
      val anyBodyErrors: Either[MaxSizeExceeded, AnyContent] = request.body
      anyBodyErrors match {
        case Left(size) => {
          Future {
            EntityTooLarge(Json.toJson(JsonResultError(messagesApi("error.entityTooLarge")(langs.availables(0)))))
          }
        }
        case Right(body) => {

          //val body:AnyContent = request.body
          val jsonBodyOption = body.asJson
}
}