java服务器限速下载_Java文件下载限速
之前一直使用的Spring提供的ResponseEntity來做下載,主要代碼如下:
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment", order.getSn() + "." + FilenameUtils.getExtension(file.getName()));
return new ResponseEntity(FileUtils.readFileToByteArray(file), headers, HttpStatus.OK);
上面的代碼有一些問題,就是ResponseEntity加載的時候是一次性把整個文件load到內(nèi)存。
那么就可能出現(xiàn)一些問題,例如幾個用戶同時下載一個200M的文件那么內(nèi)存消耗非常快,而且沒辦法限速,也許是我沒找到。
那么怎么限速呢?直接貼上代碼:<
response.setContentType("application/octet-stream");;
response.setHeader("Content-Disposition", "attachment; filename=" + order.getSn() + "." + FilenameUtils.getExtension(file.getName()));
OutputStream os = response.getOutputStream();
InputStream is = new FileInputStream(file);
response.setContentLength(is.available()); // 顯示文件大小
byte[] bytes = new byte[128 * 1024];
int index = 0;
while((index = is.read(bytes)) != -1) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
os.write(bytes, 0, index);
}
is.close();
這里主要使用線程休眠來達(dá)到控制速度的,代碼請自行優(yōu)化。
優(yōu)化思路:
下載人數(shù)少或者下載的文件比較大則把休眠時間調(diào)小等等
總結(jié)
以上是生活随笔為你收集整理的java服务器限速下载_Java文件下载限速的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 王者荣耀战区实时战力查询
- 下一篇: 关于python中.item()的用法