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