Java: возобновите Загрузку в 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!
Ответы сервера с "302, НАЙДЕННЫМИ" и "206 Частичного Содержания" в журнале wget.
Может "302 НАЙДЕННЫХ" причины проблема?

Какова проблема?
Спасибо.

9
задан RYN 5 August 2010 в 14:14
поделиться

2 ответа

Попробуйте:

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

Строчный регистр спецификатора диапазона в соответствии со спецификацией. Кроме того, если ваш частичный файл был 500 байтов, это означает, что ваш диапазон байтов составляет 0-499, и вы хотите 500+.

17
ответ дан 4 December 2019 в 10:30
поделиться

Проблема находится в (fcheck.length () - 1) : это должно быть fcheck.length () .

3
ответ дан 4 December 2019 в 10:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: