播放2.6 EntityStreamSizeException异常

时间:2017-07-19 09:01:37

标签: scala playframework playframework-2.6

在我的应用程序中,我需要上传相当大的文件(最大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 =>
    ...
}

似乎没什么用。谁能告诉我我做错了什么?

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

1 个答案:

答案 0 :(得分:2)

我找到了相关的拉取请求: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,因此只播放设置计数。