背景:
大文件下载一般需要断点续传。
公司的fastdsf服务器日志显示,一个下载请求会触发多次下载。
打印header,发现多了一个属性 Content-Range=bytes 10000-19999/20000
服务端代码
inputStream=new FileInputStream("文件路径");
long pos = 0;
if (null != request.getHeader("Range")) {
response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT);
try {
pos = Long.parseLong(request.getHeader("Range").replaceAll("bytes=", "").replaceAll("-", ""));
} catch (Exception e) {
pos = 0;
}
}
inputStream.skip(pos);
String contentRange = new StringBuffer("bytes ").append(pos+"").append("-").append((fSize - 1)+"").append("/").append(fSize+"").toString();
response.setHeader("Content-Range", contentRange);
response.setCharacterEncoding("utf-8");
response.setContentType("application/x-download");
response.setHeader("Accept-Ranges", "bytes");
response.setHeader("Content-Length", String.valueOf(fSize));
response.setHeader("Content-Disposition", "attachment;fileName=" + fileName);
out = response.getOutputStream();
byte[] buffer = new byte[1024*10];
int length = inputStream.read(buffer, 0, buffer.length);
while (length != -1) {
out.write(buffer, 0, length);
length = inputStream.read(buffer, 0, buffer.length);
}