(Play 2.0) Установите максимальный размер POST для AnyContent

Я использую Scala в Play 2.0, и я получаю ошибку 413, когда большие данные (более 100 КБ) отправляются на конкретную конечную точку. Он использует парсер anyContent, и нецелесообразно использовать какой-либо другой парсер для этого конкретного API.

Есть еще вопросы о переполнении стека, которые показывают, как увеличить максимальный размер POST для текстовых или JSON-запросов. Как это сделать для anyContent или просто увеличить лимит по всему проекту?

Ответы

Ответ 1

TL; DR добавить parsers.text.maxLength = 512k или любой другой размер в application.conf

Обновление: найдено в официальной документации

Он фактически задокументирован в API, хотя для его фактического поиска потребовалось некоторое копирование.

Расширение DEFAULT_MAX_TEXT_LENGTH показывает, что максимальный размер текстовых данных можно настроить, установив parsers.text.maxLength в application.conf. Если посмотреть в самом источнике, то по умолчанию это 100Kb, поэтому это наиболее вероятно, что вам нужно установить.

В отношении некоторой связанной заметки мы также имеем метод maxLength, который может быть использован для любого BodyParser, что подразумевается для нетекстовых данных, нет верхнего предела, если вы не примените этот метод. Фактически, мы можем применить его к парсеру AnyContent следующим образом:

def foo = Action(parse.maxLength(512 * 1024, parser = parse.anyContent)) { implicit req =>
    req.body match {
        case Left(_) => EntityTooLarge
        case Right(body) => Ok("This is totally not too large")
    }
}

Ответ 2

Примечание для тех, кто использует исходный синтаксический анализатор, он принимает максимум как параметр:

Действие (parse.raw(10000 * 1024))

Подробнее см. метод parse.raw.