Java: reprendre le Téléchargement en URLConnection
J'ai écrit un programme qui télécharge des fichiers à partir de certains serveurs.
Actuellement, le programme fonctionne correctement.
Mais je veux ajouter reprendre son soutien.
Je suis en train de faire comme ça, Mais le résultat de fichier est corrompu:
....
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);
}
....
Je suis en Essais sur un serveur que je connais supporte reprendre.
J'ai téléchargé quelques octets.(72720)
Ensuite Tenté de la reprendre.
Puis j'ai ouvert le fichier avec un éditeur Hexadécimal , Au décalage 72720 les premiers Octets sont répétées:
Octets 0-36: FLV.............«..........onMetaData
Octets 72720-72756: FLV.............«..........onMetaData
Il Commence à télécharger depuis le début!
Alors que quand je le fais par wget il le fait correctement et les réponses apportées par le Contenu de Gamme domaine!
Les réponses du serveur "302 FOUND" et un "206 Partial Content" dans wget journal.
Peut "302 FOUND" à l'origine du problème?
Quel est le problème ?
Merci.
&&
de l'opérateur. I. e. if (a && b && c) { fos = new FOS(name, true); } else { fos = new FOS(name); }
. C'est tout. SEC.J'ai résumé le code! dans ces si d'autre blocs je suis la hausse de certains messages, donc ça devrait être comme il est. mais je vous remercie pour votre réponse.
Le 302 ne devrait pas être un problème puisque HTTPUrlConnection suit redirige par défaut. Sauf si vous êtes en ce qui concerne les redirections hors explicitement, ce dont je doute puisque vous êtes réellement obtenir le contenu du fichier
OriginalL'auteur RYN | 2010-08-05
Vous devez vous connecter pour publier un commentaire.
Essayer:
Minuscules de la gamme spécificateur par la spécification. Aussi, si votre fichier partiel était de 500 octets, ce qui signifie que votre plage d'octets que vous avez est 0-499, et vous voulez+ de 500.
Vous devriez envisager d'utiliser quelque chose comme wireshark pour vous assurer que votre demande d'en-tête est réglé correctement. Vous pouvez essayer d'utiliser addRequestProperty au lieu de setRequestProperty, mais j'espère qu'ils font tous les deux la même chose.
Salut, j'ai capturé à l'aide de wireshark. il est défini: "Range: bytes=257177-"! mais il commence à partir de l'octet 0 de nouveau!
Intéressant, essayez de comparer les en-têtes que vous avez, lors de l'émission le wget et de votre code. Il ressemble à droite.
OriginalL'auteur NG.
Le problème est dans
(fcheck.length() - 1)
: ce devrait êtrefcheck.length()
.OriginalL'auteur Maurice Perry