播放 2.6 EntityStreamSizeException异常

Play 2.6 EntityStreamSizeException exception

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

play.api.http.HttpErrorHandlerExceptions$$anon: 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

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

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 他们应该被应用。不知道下一步该怎么做。非常感谢任何帮助。

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

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

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