【问题标题】:(Play 2.0) Set maximum POST size for AnyContent(Play 2.0) 为 AnyContent 设置最大 POST 大小
【发布时间】:2012-07-26 15:48:41
【问题描述】:

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

Stack Overflow 上还有其他一些问题展示了如何增加文本或 JSON 请求的最大 POST 大小。如何对任何内容执行此操作,或者只是增加项目范围内的限制?

【问题讨论】:

    标签: scala playframework-2.0


    【解决方案1】:

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

    更新:发现在official documentation

    它实际上记录在 API 中,尽管需要一些挖掘才能真正找到它。

    扩展 DEFAULT_MAX_TEXT_LENGTH 显示文本数据的最大大小可通过在 application.conf 中设置 parsers.text.maxLength 进行配置。查看源本身,默认值为 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")
        }
    }
    

    【讨论】:

    • 为什么是 1024 而不是 1000?
    • 一千字节通常定义为 2^10 或 1024 字节,而不仅仅是 1000
    • 谢谢,这有帮助!此外,Play 2.4 警告:parsers.text.maxLength is deprecated, use play.http.parser.maxMemoryBuffer instead
    【解决方案2】:

    对于那些使用原始解析器的人,请注意,将最大值作为参数:

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

    查看 parse.raw 方法了解更多详情。

    【讨论】:

      【解决方案3】:

      原始正文解析器不会将整个正文缓冲到内存中,它会将正文缓冲到一个点(使用 play.http.parser.maxMemoryBuffer 配置,默认为 100kb),一旦超过,它会刷新正文到文件并开始将其写入文件,但它也对写入文件的数据量有限制,这是使用 play.http.parser.maxDiskBuffer 配置的,默认为 10mb。您的 15mb 主体可能超过了该限制,因此您需要相应地增加 play.http.parser.maxDiskBuffer。这在文档中都有解释。

      要回答您关于如何流式传输请求的实际问题,此处提供了用 Java 编写自定义正文解析器的文档:

      https://www.playframework.com/documentation/2.6.x/JavaBodyParsers#Writing-a-custom-body-parser

      这解释了您需要了解的关于 Play 正文解析器如何工作以及如何进行流式正文解析的大部分内容,在此答案中复制该文档毫无意义。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-25
        • 2018-06-27
        • 1970-01-01
        • 1970-01-01
        • 2011-08-11
        • 2013-10-05
        相关资源
        最近更新 更多