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

Entrée/Sortie Java Discussion :

[InputStream][http] télécharger depuis un serveur web


Sujet :

Entrée/Sortie Java

  1. #1
    FFF
    FFF est déconnecté
    Membre actif Avatar de FFF
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 342
    Points : 282
    Points
    282
    Par défaut [InputStream][http] télécharger depuis un serveur web
    Bonjour,

    Je cherche un moyen de télécharger un fichier se trouvant sur un serveur web.
    J'ai essayé ceci, mais le fichier que j'obtiens en local prends bien plus de place que la source, je comprends pas trop... :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
        public boolean download(String lien,String fichier) {
            try{
            URL web = new URL(lien);
            BufferedInputStream in=new BufferedInputStream(web.openStream());
            FileOutputStream fos=new FileOutputStream(dossier+fichier,true);
            byte buff[]=new byte[10000];
            while (( in.read(buff)) != -1)
                fos.write(buff);
     
            fos.close();
            }
            catch (IOException io) {System.out.print(io);return false;}
            System.out.print("Téléchargement réussi du fichier "+lien+"\n");
            return true;
        }
    merci d'avance !

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Regarde plutot du cote de la classe java.net.HttpURLConnection.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    FFF
    FFF est déconnecté
    Membre actif Avatar de FFF
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 342
    Points : 282
    Points
    282
    Par défaut
    Je viens de jeter un coup d'oeil, mais je ne vois pas ce qui me permet de récupérer un fichier en binaire avec cette classe.[/quote]

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    509
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 509
    Points : 568
    Points
    568
    Par défaut
    Citation Envoyé par FFF
    Je viens de jeter un coup d'oeil, mais je ne vois pas ce qui me permet de récupérer un fichier en binaire avec cette classe.
    [/quote]
    Bonjour,
    Pourtant HttpUrlCOnnection permet d'ouvrir une connexion Http sur une url et d'ouvrir un flux entrant et un flux sortant !

    DOnc en recuperant le contenue du flux entrant tu devrais avoir ton fichier !
    UML avec VIOLET

  5. #5
    FFF
    FFF est déconnecté
    Membre actif Avatar de FFF
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 342
    Points : 282
    Points
    282
    Par défaut
    Ben dis moi comment faire alors stp, je vois pas comment.
    Je viens de faire ça mais j'ai toujours un fichier trop gros, mais je ne vois pas où est l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
        public boolean download(String lien) {
            try{
                URL web = new URL(lien);
                URLConnection connexion=web.openConnection();
                InputStream in=new BufferedInputStream(connexion.getInputStream());
                String FileName = web.getFile( ); 
                int FileLenght = uc.getContentLength( );
                FileName = FileName.substring(FileName.lastIndexOf('/') + 1);         
                FileOutputStream fos=new FileOutputStream(dossier+"\\tempfile\\"+FileName,true);
                byte buff[]=new byte[10000];
                while (( in.read(buff)) != -1)
                    fos.write(buff);
     
                in.close();
                fos.flush();
                fos.close();
            }
            catch (IOException io) {System.out.print(io);return false;}
            System.out.print("Téléchargement réussi du fichier "+lien+"\n");
            return true;
        }

  6. #6
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Avant tout quelques remarques sur le code :
    • Tu ne fermes pas tous tes fluxs, et il est préférable de le faire dans un bloc finally...
    • L'utilisation de BufferedInputStream est inutile puisque tu utilises ton propre buffer.
    • Il faut que tu récupère le code de retour du read() pour le passer au write(), sinon lors du dernier passage tu écris des caractères en plus : si tu lis seulement 10 bytes, write() écrira quand même tous le tableau... --> 9990 bytes de trop (ton problème vient surement de là)



    Ensuite il n'est pas obligatoire d'utiliser directement HttpUrlCOnnection puisque c'est ce qui est utilisée (indirectement) par la méthode openStream()...


    Cela peut donner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    public boolean download(String lien,String fichier) {
    	InputStream webStream = null;
    	FileOutputStream fos = null;
    	try{
    		URL web = new URL(lien);
    		webStream = web.openStream();
    		fos=new FileOutputStream(dossier+fichier,true);
     
    		byte buff[]=new byte[10000];
    		int readCount = webStream.read(buff);
    		while (readCount != -1) {
    			fos.write(buff, 0, readCount);
    			readCount = webStream.read(buff);
    		}
    	}
    	catch (IOException io) {
    		System.out.print(io);
    		return false;
    	}
    	finally {
    		tryToClose(webStream);
    		tryToClose(fos);
    	}
    	System.out.print("Téléchargement réussi du fichier "+lien+"\n");
    	return true;
    }
    Avec tryToClose() comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public void tryToClose(Closeable closeable) {
    	if (is!=null) {
    		try {
    			closeable.close();
    		} catch (IOException lException) {
    			// ignore
    		}
    	}
    }
    L'interface Closeable n'est apparut qu'avec Java 5.0, donc si tu ne l'utilises pas il faudra la coder deux fois (avec un InputStream et un OutputStream).


    a++

  7. #7
    FFF
    FFF est déconnecté
    Membre actif Avatar de FFF
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 342
    Points : 282
    Points
    282
    Par défaut
    Merci adiGuba !!!!
    Réponse concise efficace, on ne peut plus complète !
    Effectivement je pensais à tors que seuls les octets non nuls étaient écris dans le flux de sortie (ce qui marchait dans mon cas avec des fichiers, ne marche pas forcément pour un autre flux, du coup je vais aussi corriger cette erreur pour mes FileInpuStream/OutputStream sauf si qqun me dis que ce n'est pas nécessaire).

    Ton code marche impec et j'ai pu corrigé mon erreur !
    Utilisant Tiger c'est super !

    Merci encore.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/03/2010, 20h39
  2. Télécharger, depuis le serveur, un fichier distant
    Par gamerome dans le forum ASP.NET
    Réponses: 3
    Dernier message: 08/12/2009, 14h15
  3. [HTTPS] Communiquer avec un serveur web securisé
    Par xantra dans le forum Bibliothèques
    Réponses: 3
    Dernier message: 10/09/2009, 18h53
  4. temps de chargement d'une page html depuis un serveur web
    Par mitoubra dans le forum Servlets/JSP
    Réponses: 11
    Dernier message: 08/06/2007, 20h16
  5. download de fichier depuis un serveur web
    Par minusette dans le forum Modules
    Réponses: 9
    Dernier message: 14/10/2005, 09h10

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