上記は元の記事ですが、サポートを再開したいと考えています。つまり、最初に 51% をダウンロードし、別の機会に別の 49% をダウンロードできます。
環境トムキャット7.0.39
私はいくつか試しましたが、それでも失敗しました。
ここに私のコードがあります、またはあなたのコードを共有することができます
InputStream fis =new FileInputStream(filepath+file_name);
response.setHeader("Accept-Ranges", "bytes");
long length = (int) new File(filepath+file_name).length();
long start = 0;
if (request.getHeader("Range") != null)
{
response.setStatus(javax.servlet.http.HttpServletResponse.SC_PARTIAL_CONTENT);// 206
start = Long.parseLong(request.getHeader("Range")
.replaceAll("bytes=", "").replaceAll("-", ""));
}
response.setHeader("Content-Length", new Long(length - start).toString());
if (start != 0)
{
response.setHeader("Content-Range", "bytes "
+ new Long(start).toString() + "-"
+ new Long(length - 1).toString() + "/"
+ new Long(length).toString());
}
response.setContentType("application/octet-stream");
fis.skip(start);
byte[] b = new byte[1024];
int i;
while ((i = fis.read(b)) != -1) {
response.getOutputStream().write(b, 0, i);
response.flushBuffer();
}
fis.close();
修正済み、これは私の編集済みバージョンです
long length = (int) new File(filepath+file_name).length();
long start = 0;
response.setHeader("Accept-Ranges", "bytes");
response.setStatus(javax.servlet.http.HttpServletResponse.SC_PARTIAL_CONTENT);// 206
if (request.getHeader("Range") != null)
{
int x = request.getHeader("Range").indexOf("-");
start = Long.parseLong(request.getHeader("Range").substring(0, x)
.replaceAll("bytes=", ""));
}
response.setHeader("Content-Length", new Long(length - start).toString());
if(start == 0)
response.setHeader("Content-Range", "bytes 0-" +new Long(length - 1).toString()+"/"+length);
else
response.setHeader("Content-Range", "bytes "+start+"-"+new Long(length - 1).toString()+"/"+length);
fis.skip(start);
byte[] b = new byte[1024];
int i;
while ((i = fis.read(b)) != -1) {
response.getOutputStream().write(b, 0, i);
response.flushBuffer();
}
fis.close();