Максимальный размер загрузки файлов в Play Framework 2.0
Когда я загружаю большие файлы (более 1 МБ) в play framework 2.0, я получаю
"413 Ошибка запроса сущности слишком большой.
Не могли бы вы рассказать, как избавиться от этого?
Спасибо,
UPDATE
Я решил эту проблему, добавив это в application.conf
# Установить максимальный размер файла
parsers.MultipartFormData.maxLength = 10240K
Ответы
Ответ 1
См. 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.conf
, используя parsers.text.maxLength
.
Ответ 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
}
}