Подтвердить что ты не робот

Максимальный размер загрузки файлов в Play Framework 2.0

Когда я загружаю большие файлы (более 1 МБ) в play framework 2.0, я получаю

"413 Ошибка запроса сущности слишком большой.

Не могли бы вы рассказать, как избавиться от этого?

Спасибо,

UPDATE Я решил эту проблему, добавив это в application.conf

# Установить максимальный размер файла

parsers.MultipartFormData.maxLength = 10240K

4b9b3361

Ответ 2

parse.multipartFormData и parse.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 */
            ...
        }
    }
}

Ответ 3

Для версии игры 2.4.x:

Для парсеров, которые хранят содержимое буфера на диске, например, сырой парсер или multipart/form-data, максимальная длина содержимого указана с использованием свойства play.http.parser.maxDiskBuffer, по умолчанию используется значение 10MB. Параграф multipart/form-data также применяет свойство длины текста max для совокупности полей данных.

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

Ответ 4

В моем случае я получил ошибку в запросе AJAX (это был длинный текст). Для таких запросов вы можете установить свойство:

parsers.text.maxLength = 1024К

Дополнительная информация о документации по игре: https://www.playframework.com/documentation/2.0/JavaBodyParsers

Ответ 5

Я использую парсер 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
}
}