Bonjour à tous,
voilà, j'ai un peu de temps à perdre (intercontrat) et j'essaye de faire un petit utilitaire pour télécharger un fichier depuis une URL (depuis les FTP de Free plus particulièrement http://dl.free.fr/, qui propose des liens http)
Pas de problème à priori pour l'opération en elle même, je fais une premiere requête pour récupérer la session est une deuxieme avec la dite session pour accéder au fichier. Mais je voudrais améliorer un peu la chose en proposant le reprise de téléchargement (pause/resume). Et c'est là que ça ce complique, car j'ai la vague impression que ce ne soit pas possible, mais dans le doute je viens vous consulter
J'emploi une méthode assez basique qui pour résumer est la suivante :
et donc je ne vois pas comment faire ce que je veux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Proxy proxy = new Proxy(Proxy.Type.HTTP,new InetSocketAddress(ip,portNumber)); URL myUrl = new URL("xxxxxxxxxxx"); URLConnection urlConn2 = myUrl.openConnection(proxy); ... [code pour d'éventuel paramètre/cookies dans la requête]... urlConn2.connect(); InputStream input = urlConn2.getInputStream(); ...[Manipulation classique du stream pour lire le contenu]...
Je n'ai pas trouvé de méthode sur URLConnection qui pourrait convenir, je peux juste récupérer le flux.
Et sur le flux, j'ai tenter (bien que pas convaincu) la méthode skip(long) mais sans succès, car bien entendu pour déplacer le pointeur au bon endroit il faut acquerir le flux, ce qui se traduit ici par un téléchargement de tout ce qui précède la position de l'offset.
ça me semble donc mal engagé!
Mais existerait t'il d'autre méthode pour arrivé à mes fins ? (éventuellement dans d'autre langage de programmation en dernier recourt)
j'ai du tenter d'utiliser un objet HttpClient sans plus d'ouverture.
Second problème, la gestion des déconnexions/timeout.
Du fait que j'utilise stream.read(), je crois qu'en cas de timeout/déconnexion la méthode va me renvoyé -1, que je ne voudrais récupérer que quand j'ai terminé mon téléchargement.
J'ai pensé utiliser la taille pour vérifier si c'était terminé, mais je n'arrive pas à obtenir le taille du fichier (pourtant c'est possible, puisque firefox me l'affiche par exemple) car le metatag n'est pas renseigné et me retourne -1.
Merci pour vos suggestions.
Partager