IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Web en Java Discussion :

[Internet] Telechargement en Java : gérer les reprises ?


Sujet :

Développement Web en Java

  1. #1
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 151
    Points : 85
    Points
    85
    Par défaut [Internet] Telechargement en Java : gérer les reprises ?
    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 :

    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]...
    et donc je ne vois pas comment faire ce que je veux.
    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.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 18
    Points : 20
    Points
    20
    Par défaut
    Bonjour,

    Je n'ai plus le code sous la main mais je m'étais déjà attelé à ce problème avec HttpClient.
    Dans les entêtes que tu envoies dans ta requête HTTP de type GET, tu peux préciser l'entête suivante :
    en remplaçant 123456 par la taille de ce que tu as déjà téléchargé.

    Je pense que tu peux faire le même genre de chose avec URLConnection et setRequestProperty.

    Pour la méthode read, en cas de déconnexion, elle lève une exception donc pas de problème a priori.

    Bon courage

  3. #3
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 151
    Points : 85
    Points
    85
    Par défaut
    Bonjour à toi, er surtout merci!!

    Après un test rapide ça semble marcher sans problème!!!


    J'aimerai juste pouvoir obtenir la taille totale du fichier maintenant, pour faire une barre de progression.

    La fonction UrlConnection.getContentLength() me renvois -1 si je ne met pas de range ou , mais si je met un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    range = 300000 - 1000000
    par exemple, la ça me renvoit bien la taille du morceau.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 18
    Points : 20
    Points
    20
    Par défaut
    C'est bizarre en effet.
    Normalement, getContentLength s'appuie sur le Header content-length renvoyé par le serveur HTTP.

    Une première étape pourrait être d'afficher tout ce qui est retourné par la méthode getHeaderFields() de URLConnection.

  5. #5
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 151
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par feuxeu77 Voir le message
    C'est bizarre en effet.
    Normalement, getContentLength s'appuie sur le Header content-length renvoyé par le serveur HTTP.

    Une première étape pourrait être d'afficher tout ce qui est retourné par la méthode getHeaderFields() de URLConnection.
    Oui, c'est ce que j'avais noté, mais il semblerai que ça n'aille pas

    Je viens de vérifier les champs avec getHeaders, et j'ai bien la taille indiquée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Content-Length = 4532364246
    Je vais donc passer par ça!

    Merci pour ton aide en tout cas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Gérer le cache de Java pour les images
    Par JavaMan77 dans le forum Applets
    Réponses: 0
    Dernier message: 14/12/2008, 23h49
  2. Gérer les sons avec JAVA
    Par Luffy49 dans le forum Multimédia
    Réponses: 5
    Dernier message: 17/01/2008, 22h41
  3. Réponses: 2
    Dernier message: 07/07/2007, 14h24
  4. java/gérer les transactions d'un block
    Par snetechen dans le forum Général Java
    Réponses: 4
    Dernier message: 26/05/2007, 15h40
  5. [Indy] Gérer les déconnexions d'internet
    Par Gaadek dans le forum Delphi
    Réponses: 2
    Dernier message: 26/01/2007, 23h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo