我想下载图像的前几个kb,然后从内容中获取一个InputStream。最终,我使用ImageIO
来获取图像的尺寸,而且只需要阅读一点。
我有代码工作,可以快速从流中读取图像,并在读取一点图像后返回,但下载继续在后台进行 - 耗费传输带宽。
我是Akka Streams的新手,并且无法弄清楚如何从Play中的流媒体文档中获取能够消耗一点,像在InputStream中那样抓取它,并停止下载。
ws.url(uri).withMethod("GET").stream().map { res =>
val is = res.body.runWith(StreamConverters.asInputStream())
// Efficiently gets dimensions without needing the entire file
val dimensions = dimensionsFromImageIo(is)
// This doesn't stop the download :(
is.close()
}
然后,我尝试了类似这样的内容,但shutdown
上的abort
或killSwitch
都没有停止下载,后台继续下载,我可以通过监控带宽看到
ws.url(uri).withMethod("GET").stream().map { res =>
val (killSwitch, is) = res.body
.viaMat(KillSwitches.single)(Keep.right)
.toMat(StreamConverters.asInputStream())(Keep.both)
.run()
val dimensions = dimensionsFromImageIo(is)
is.close()
// This doesn't stop the download either
killSwitch.shutdown()
}