【问题标题】:Play 2.6 EntityStreamSizeException exception播放 2.6 EntityStreamSizeException 异常
【发布时间】:2017-07-19 09:01:36
【问题描述】:

在我的应用程序中,我需要上传相当大的文件(最多 4GB)。我使用file 表单字段来完成此操作,并将文件保存到临时位置以供进一步处理。但是,当涉及超出内容大小限制的文件时,我会收到 EntityStreamException:

play.api.http.HttpErrorHandlerExceptions$$anon$1: Execution exception[[EntityStreamSizeException: EntityStreamSizeException: actual entity size (Some(781434380)) exceeded content length limit (8388608 bytes)! You can configure this by setting `akka.http.[server|client].parsing.max-content-length` or calling `HttpEntity.withSizeLimit` before materializing the dataBytes stream.]]

我尝试在 application.conf 中设置两个 akka.*.[client|server] 限制,如下所示:

akka.http.server.parsing.max-content-length = 4096MB
akka.http.client.parsing.max-content-length = 4096MB

但它仍然会崩溃并显示相同的消息。 我也尝试按照文档进行设置:

play.http.parser.maxMemoryBuffer=512k
play.http.parser.maxDiskBuffer=4096MB 

正如这里建议的那样: https://www.playframework.com/documentation/2.6.x/ScalaBodyParsers

我尝试的最后一件事是显式覆盖我的帖子处理程序中的设置:

def doCreate = checkToken {
    Action(parse.maxLength(400000000, parse.multipartFormData)) { implicit request =>
    ...
}

似乎没有任何效果。谁能告诉我我做错了什么?

更新: 在潜入 play/akka 代码和一些调试之后,我可以看到任何与 akka 相关的设置都被完全忽略了。我看到 play.http.parser 设置被传播到上下文并被使用,但是没有应用任何 akka 设置,并且 maxContentLength 仍然设置为默认值 8MB。但是根据这个文件:https://www.playframework.com/documentation/2.6.x/SettingsAkkaHttp 应该应用它们。不知道下一步该怎么做。任何帮助将不胜感激。

【问题讨论】:

    标签: scala playframework playframework-2.6


    【解决方案1】:

    我找到了一个相关的拉取请求:https://github.com/playframework/playframework/pull/7548

    因此,据我了解,此设置不应该起作用。异常中的消息具有误导性。

    UPD:https://blog.playframework.com/play-2-6-1-released/ 在此处的更改说明中存在此合并请求。更新到 Play 2.6.1 后,我可以看到 akka max-content-limit 设置为 infinite 所以只有播放设置才算。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-15
      • 2019-05-05
      • 1970-01-01
      • 2017-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多