1

在我的应用程序中,我需要上传相当大的文件(最多 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 他们应该被应用。不知道下一步该怎么做。任何帮助将不胜感激。

4

1 回答 1

2

我找到了一个相关的拉取请求: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所以只有播放设置才算。

于 2017-07-19T20:03:57.583 回答