Я записал программу, которая загружает некоторые файлы с некоторых серверов.
В настоящее время программа работает правильно.
Но я хочу добавить поддержку резюме ему.
Я делаю его как это, Но файл результата повреждается:
....
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 НАЙДЕННЫХ" причины проблема?
Какова проблема?
Спасибо.
Попробуйте:
connection.setRequestProperty("Range", "bytes=" + fcheck.length() + "-");
Строчный регистр спецификатора диапазона в соответствии со спецификацией. Кроме того, если ваш частичный файл был 500 байтов, это означает, что ваш диапазон байтов составляет 0-499, и вы хотите 500+.
Проблема находится в (fcheck.length () - 1)
: это должно быть fcheck.length ()
.