问题:限制二进制文件下载速率。
def test = {
Logger.info("Call test action")
val file = new File("/home/vidok/1.jpg")
val fileIn = new FileInputStream(file)
response.setHeader("Content-type", "application/force-download")
response.setHeader("Content-Disposition", "attachment; filename=\"1.jpg\"")
response.setHeader("Content-Length", file.lenght + "")
val bufferSize = 1024 * 1024
val bb = new Array[Byte](bufferSize)
val bis = new java.io.BufferedInputStream(is)
var bytesRead = bis.read(bb, 0, bufferSize)
while (bytesRead > 0) {
bytesRead = bis.read(bb, 0, bufferSize)
//sleep(1000)?
response.writeChunk(bytesRead)
}
}
但它只适用于文本文件。如何使用二进制文件?
答案 0 :(得分:2)
你的基本想法是正确的:每次你读取一定数量的字节(存储在你的缓冲区中),你需要:
sleep(Y)
关于这个right here已经有了一个很好的问题,它应该包含你需要的一切。我认为特别是ThrottledInputStream
解决方案(这不是公认的答案)相当优雅。
要记住几点:
Content-Range
)和Java NIO下载文件。但是,请记住,这会使事情变得更加复杂。答案 1 :(得分:0)
我不会实现任何好的网络服务器应该能够为我提供的东西。在企业系统中,这种事情通常由Web入口服务器或防火墙处理。但如果你必须这样做,那么tmbrggmn的回答对我来说很好。 NIO是一个很好的提示。