为了账号安全,请及时绑定邮箱和手机立即绑定

在Java中恢复http文件下载

在Java中恢复http文件下载

繁花不似锦 2019-10-05 13:43:26
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()。


查看完整回答
反对 回复 2019-10-05
?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

签出该线程,它具有与您类似的问题。如果wget正常工作,则服务器显然支持恢复下载。好像您没有If-Range按照上面链接的可接受答案中所述设置标题。即。加:


// Initial download.

String lastModified = connection.getHeaderField("Last-Modified");


// ...


// Resume download.

connection.setRequestProperty("If-Range", lastModified); 


查看完整回答
反对 回复 2019-10-05
  • 3 回答
  • 0 关注
  • 461 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信