URL url = new URL("http://download.thinkbroadband.com/20MB.zip");URLConnection connection = url.openConnection();File fileThatExists = new File(path); OutputStream output = new FileOutputStream(path, true);connection.setRequestProperty("Range", "bytes=" + fileThatExists.length() + "-");connection.connect();int lenghtOfFile = connection.getContentLength();InputStream input = new BufferedInputStream(url.openStream());byte data[] = new byte[1024];long total = 0;while ((count = input.read(data)) != -1) { total += count; output.write(data, 0 , count);}在这段代码中,我尝试恢复下载。目标文件为20MB。但是,当我停止在10mb上下载,然后遇到麻烦时,我得到的文件大小为30MB。似乎它继续写入文件,但不能部分从服务器下载。Wget -c非常适合该文件。如何恢复文件下载?
3 回答
喵喵时光机
TA贡献1846条经验 获得超7个赞
我猜你所面临的问题是调用url.openStream()后url.openConnection()。
url.openStream()等同于url.openConnection().getInputStream()。因此,您两次请求该URL。特别是第二次,它没有指定range属性。因此,下载始终从头开始。
您应该替换url.openStream()为connection.getInputStream()。
翻翻过去那场雪
TA贡献2065条经验 获得超14个赞
签出该线程,它具有与您类似的问题。如果wget正常工作,则服务器显然支持恢复下载。好像您没有If-Range按照上面链接的可接受答案中所述设置标题。即。加:
// Initial download.
String lastModified = connection.getHeaderField("Last-Modified");
// ...
// Resume download.
connection.setRequestProperty("If-Range", lastModified);
添加回答
举报
0/150
提交
取消