在Java中恢复http文件下载

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非常适合该文件。如何恢复文件下载?


繁花不似锦
浏览 462回答 3
3回答

喵喵时光机

我猜你所面临的问题是调用url.openStream()后url.openConnection()。url.openStream()等同于url.openConnection().getInputStream()。因此,您两次请求该URL。特别是第二次,它没有指定range属性。因此,下载始终从头开始。您应该替换url.openStream()为connection.getInputStream()。

翻翻过去那场雪

签出该线程,它具有与您类似的问题。如果wget正常工作,则服务器显然支持恢复下载。好像您没有If-Range按照上面链接的可接受答案中所述设置标题。即。加:// Initial download.String lastModified = connection.getHeaderField("Last-Modified");// ...// Resume download.connection.setRequestProperty("If-Range", lastModified); 
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java
Android