2012-07-27 22 views
15

Estoy usando Scala en Play 2.0, y obtengo un error 413 siempre que los datos de gran tamaño (más de 100KB) se envían por correo a un punto final en particular. Está utilizando el analizador anyContent, y no es razonable usar ningún otro analizador para esta API en particular.(Play 2.0) Establecer el tamaño máximo de POST para AnyContent

Existen otras preguntas sobre el desbordamiento de pila que muestran cómo aumentar el tamaño máximo de POST para las solicitudes de texto o JSON. ¿Cómo lo hago para anyContent, o simplemente aumento el límite en todo el proyecto?

Respuesta

20

TL; DR añadir parsers.text.maxLength = 512k o lo que sea el tamaño de su application.conf

actualización: Se encuentra en la official documentation

En realidad está documentado en la API, aunque tomó algo de investigación para encontrar realmente es.

Al expandir DEFAULT_MAX_TEXT_LENGTH se muestra que el tamaño máximo de los datos de texto se puede configurar configurando parsers.text.maxLength en application.conf. Al buscar en la fuente en sí, el valor predeterminado es 100 Kb, por lo que es muy probable que sea lo que necesita establecer.

En una nota algo relacionada, también tenemos el método maxLength que se puede utilizar para cualquier BodyParser, lo que implica que para datos que no sean de texto, no hay límite superior a menos que aplique ese método. De hecho, podemos aplicarlo al analizador AnyContent así:

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") 
    } 
} 
+0

¿Por qué es 1024 en lugar de solo 1000? –

+2

un kilobyte generalmente se define como 2^10 o 1024 bytes en lugar de solo 1000 – thatsmydoing

+1

¡Gracias, esto ayudó! Además, Play 2.4 advierte: 'parsers.text.maxLength está en desuso, use play.http.parser.maxMemoryBuffer en su lugar ' – Jonik

0

Nota para aquellos que utilizan el analizador crudo, que se toma como parámetro máximo:

Acción (parse.raw (10000 * 1024))

Consulte el método parse.raw para obtener más detalles.

Cuestiones relacionadas