Java:resume在URLConnection中下载

时间:2010-08-05 12:00:40

标签: java resume urlconnection

我编写了一个从某些服务器下载一些文件的程序 目前程序正常运行 但是我想为它添加简历支持 我这样做但结果文件已损坏:

....

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”会导致问题吗?

有什么问题?
感谢。

2 个答案:

答案 0 :(得分:17)

尝试:

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

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

答案 1 :(得分:3)

问题出在(fcheck.length() - 1):这应该是fcheck.length()