2012-07-27 83 views
15

我在Play 2.0中使用Scala,每当大数据(超过100KB)发布到特定端点时,我都会收到413错误。它使用anyContent解析器,并且为这个特定的API使用任何其他解析器是不合理的。(Play 2.0)为AnyContent设置最大POST大小

堆栈溢出还有其他问题,显示如何增加文本或JSON请求的最大POST大小。我如何为anyContent做到这一点,或者只是增加项目范围的限制?

回答

20

TL; DR添加parsers.text.maxLength = 512k或任何大小的application.conf

更新:发现于official documentation

它在API实际证明,虽然采取了一些挖掘真正找到它。

展开DEFAULT_MAX_TEXT_LENGTH表示文本数据的最大大小可以通过设置parsers.text.maxLengthapplication.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") 
    } 
} 
+0

为什么是1024而不是1000? – 2015-06-30 13:08:41

+2

千字节通常定义为2^10或1024个字节而不是1000个 – thatsmydoing 2015-07-08 17:26:07

+1

谢谢,这有助于!另外,Play 2.4警告:'parsers.text.maxLength已被弃用,请使用play.http.parser.maxMemoryBuffer来代替' – Jonik 2015-11-20 16:28:05

0

注意使用原始的解析器,即一个最多需要作为一个参数:

行动(parse.raw(10000 * 1024 ))

有关更多详细信息,请参阅parse.raw方法。

相关问题