Napisałem program, który pobiera pliki z niektórych serwerów.
Obecnie program działa poprawnie.
Ale chcę dodać do niego wsparcie resume.
robię to tak ale plik jest uszkodzony wynik:Java: wznów Pobierz w 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);
}
....
mam testowanie go na serwerze, który znam podpory wznowić.
Pobrałem niektóre bajty. (72720)
Następnie Próbowałem je wznowić.
Następnie otworzyłem plik za pomocą edytora szesnastkowego, Przy przesunięciu 72720 powtarzane są pierwsze Bajty:
Bajty 0-36: FLV ............. «........ ..onMetaData
Bajty 72720-72756: FLV ............. «.......... onMetaData
Rozpoczyna pobieranie od samego początku!
Podczas gdy robię to za pomocą wget, to działa poprawnie i odpowiada polu Content-Range!
Odpowiedzi serwera z "302 ZNALEZIONO" i "Częściową zawartością 206" w dzienniku wget.
Czy "302 FOUND" może spowodować problem?
Na czym polega problem?
Dzięki.
Innym problemem jest niepotrzebnie zagnieżdżony blok/else. Skorzystaj z operatora '&&'. To znaczy. 'if (a && b && c) {fos = new FOS (name, true); } else {fos = new FOS (name); } '. to jest to! SUCHY. – BalusC
Podsumowałem kod! w tych, jeśli jeszcze blokuje, podniosłem kilka komunikatów, więc powinno być tak, jak jest. ale dziękuję za odpowiedź. – RYN
302 nie powinien stanowić problemu, ponieważ HTTPUrlConnection domyślnie wykonuje przekierowania. O ile nie przekręcasz wyraźnie przekierowań, które wątpię, ponieważ faktycznie dostajesz treść pliku –