如何使用akka的http客户端设置最大内容长度?

时间:2016-08-31 21:41:45

标签: scala akka akka-stream

如果我尝试下载一个非常大的文件(超过100 MB),我会收到此错误:

 You can configure this by setting `akka.http.[server|client].parsing.max-content-length` or calling `HttpEntity.withSizeLimit` before materializing the dataBytes stream.


val responseFuture: Future[HttpResponse] =
  Http().singleRequest(HttpRequest(uri = "http://akka.io"))

我正在阅读我能以某种方式将HttpEntity设置为withoutSizeLimit,我该怎么做?

BTW,如果我将这些配置设置添加到我的application.config中,它就无法解决问题:

akka.http.server.parsing.max-content-length=913753229
akka.http.client.parsing.max-content-length=913753229

1 个答案:

答案 0 :(得分:0)

我注意到withSizeLimit(maxBytes: Long)akka.http.scaladsl.model.HttpEntity方法的源代码注释:

  

请注意,如果通过Source方法适当修改了此实体中包含的HttpEntity.limitable实例,则通过此方法应用的大小限制将起任何作用。对于由HTTP层本身创建的所有实体,情况总是如此,但如果您自己创建实体并希望它们正确地遵守通过此方法定义的限制,则需要确保自己应用HttpEntity.limitable

也许您需要使用Source对象中的limitableByteSource()方法转换HttpEntity以使withoutSizeLimit生效。这里有一些例子:akka http doc

我遇到了同样的问题,但文档中有关withSizeLimit()无效的原因的信息较少。幸运的是,源代码提供了有用的信息: - )