2012-07-27 2 views
15

Ich verwende Scala in Play 2.0 und erhalte einen 413-Fehler, wenn große Daten (über 100 KB) an einen bestimmten Endpunkt gesendet werden. Es verwendet den anyContent-Parser und es ist nicht sinnvoll, einen anderen Parser für diese spezielle API zu verwenden.(Play 2.0) Maximale POST-Größe für AnyContent festlegen

Es gibt andere Fragen zu Stack Overflow, die zeigen, wie die maximale POST-Größe für Text- oder JSON-Anforderungen erhöht wird. Wie mache ich es für AnyContent, oder erhöhen Sie das Limit projektweit?

Antwort

20

TL; DR hinzufügen parsers.text.maxLength = 512k oder was auch immer Größe zu Ihrem application.conf

aktualisieren: Gefunden in den official documentation

Es ist eigentlich in den API dokumentiert, obwohl es einige Graben tatsächlich dauerte es zu finden.

Die Erweiterung DEFAULT_MAX_TEXT_LENGTH zeigt, dass die maximale Größe für Textdaten konfigurierbar ist, indem parsers.text.maxLength in application.conf festgelegt wird. Wenn Sie in der Quelle selbst suchen, ist der Standardwert 100Kb. Dies ist wahrscheinlich das, was Sie einstellen müssen.

Zu einem etwas verwandten Hinweis haben wir auch die maxLength Methode, die für alle BodyParser verwendet werden kann, was bedeutet, dass für Nicht-Text-Daten gibt es keine obere Grenze, wenn Sie diese Methode anwenden. In der Tat können wir es auf die anycontent Parser gelten wie folgt:

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

Warum ist es 1024 statt nur 1000? –

+2

ein Kilobyte ist normalerweise definiert als 2^10 oder 1024 Bytes statt nur 1000 – thatsmydoing

+1

Danke, das hat geholfen! Außerdem warnt Play 2.4: 'parsers.text.maxLength ist veraltet, benutze stattdessen play.http.parser.maxMemoryBuffer' – Jonik

0

Hinweis für diejenigen, die Roh-Parser verwenden, dass ein Maximum als Parameter:

Aktion (parse.raw (10000 * 1024))

Weitere Informationen finden Sie in der Methode parse.raw.