当前位置: 首页 > 面试题库 >

Java:在URLConnection中恢复下载

林修真
2023-03-14
问题内容

我编写了一个程序,可以从某些服务器下载一些文件。
当前程序正常运行。
但我想为其添加简历支持。
我正在这样做,但结果文件已损坏:

....

File fcheck=new File(SaveDir+"/"+filename);
if(resumebox.isSelected() && fcheck.exists()){
    connection.setRequestProperty("Range", "Bytes="+(fcheck.length())+"-");
}

connection.setDoInput(true);
connection.setDoOutput(true);

BufferedInputStream in = new BufferedInputStream (connection.getInputStream());

pbar.setIndeterminate(false);
pbar.setStringPainted(true);

java.io.FileOutputStream fos ;
if(resumebox.isSelected()){
    if(fcheck.exists()){
        if(connection.getHeaderField("Accept-Ranges").equals("bytes")){
            fos = new java.io.FileOutputStream(SaveDir+"/"+filename,true);
        }else{
            fos = new java.io.FileOutputStream(SaveDir+"/"+filename);
        }
    }else{
        fos = new java.io.FileOutputStream(SaveDir+"/"+filename);
    }
}else{
    fos = new java.io.FileOutputStream(SaveDir+"/"+filename);
}

....

我正在我知道支持简历的服务器上对其进行测试。
我下载了一些字节。(72720)
然后尝试恢复它。
然后,我使用Hex编辑器打开文件,在偏移量72720处,重复第一个字节:
字节0-36:FLV .............«..... onMetaData
字节72720-72756:FLV .............«....... onMetaData
它从头开始下载!
当我通过wget执行此操作时,它可以正确执行,并且按Content-Range字段响应!
wget日志中服务器响应为“ 302 FOUND”和“ 206 Partial Content”。
“ 302 FOUND”会引起问题吗?

问题是什么 ?
谢谢。


问题答案:

尝试:

connection.setRequestProperty("Range", "bytes=" + fcheck.length() + "-");

根据规格小写范围说明符。另外,如果您的部分文件是500字节,则意味着您拥有的字节范围是0-499,并且您想要500+。



 类似资料:
  • 问题内容: 在这段代码中,我尝试恢复下载。目标文件为20MB。但是,当我停止在10mb上下载时,然后遇到麻烦,我得到的文件大小为30MB。似乎它继续写入文件,但不能部分从服务器下载。Wget -c非常适合该文件。如何恢复文件下载? 问题答案: 这不是我的代码,但是可以。

  • 问题内容: 我正在使用python 2.7请求模块使用以下代码下载二进制文件,如何使此代码从部分下载的文件中“自动恢复”下载。 如果可能的话,我宁愿只使用模块来实现这一目标。 问题答案: 如果Web服务器支持范围请求,则可以将Range标头添加到您的请求中: 您将收到StartPos和StopPos之间的部分。如果不知道StopPos,请使用: 因此您的代码将是:

  • 主要内容:1 什么是Java URLConnection,2 如何获取URLConnection对象,3 Java URLConnection的例子1 什么是Java URLConnection Java的的URLConnection类表示URL和应用程序之间的通信链路。此类可用于读写数据到URL引用的指定资源。 2 如何获取URLConnection对象 3 Java URLConnection的例子 Java URLConnection类提供了许多方法,我们可以使用getInputStrea

  • 问题内容: 我正在尝试从Yahoo!下载大文件!如果没有在100秒之内完成下载,显然是由(不是我)设置的网站服务器断开下载。该文件足够小,通常可以成功传输。在数据速率很慢并且下载被断开的情况下,是否有办法在断开连接发生的文件偏移处恢复URLConnection?这是代码: 问题答案: 尝试使用“范围”请求标头: 完成此操作后,您可以在给定的位置(例如,在下载数据的长度之前)开始在此处写入新下载的数

  • 问题内容: 我正在尝试在下载管理器中实现暂停/恢复,我在网上搜索并阅读了几篇文章,并根据它们更改了我的代码,但是恢复似乎无法正常工作,有什么想法吗? 问题答案: 好的问题已解决,这是我的其他想要实现暂停/恢复的用户的代码:

  • 我正在使用Python3.5请求模块下载一个文件,使用下面的代码,如何使这段代码“自动恢复”从部分下载的文件下载。 如果可能的话,我宁愿只使用模块来实现这一点。