Unfortunately we can't do that - blocking in this instance is absolutely out of the question, and especially consuming the entire body - if this was producing a 10GB file, we'll get an out of memory error.  What we should do here is replicate Play's behaviour here:

https://github.com/playframework/playframework/blob/master/framework/src/play/src/main/scala/play/core/server/netty/NettyResultStreamer.scala

In that case, if it's chunked, or if there's a content length, then we should send the headers as is, and feed the body into the Done iteratee.  Otherwise, we should attempt to (asynchronously) take one chunk.  If there's more than one chunk, then we should set the transfer encoding to chunked if the protocol is HTTP 1.1, or just set no content length header if the protocol is HTTP 1.0.  Otherwise, if there's exactly one chunk, we can send the content length header to be the length of the chunk.