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 :

[FTP-GZIP] l'upload compressée


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Par défaut [FTP-GZIP] l'upload compressée
    Hello des gens!

    Je fais du transfert de fichier par FTP, jusque là tout va bien. J'utilise la classe FtpConnection qu'on trouve un peu partout, et même ici. Qui fonctionne très bien, j'y arrive sans soucis (maintenant)

    Je compresse des fichiers en GZIP, là tout va bien aussi, j'arrive sans soucis à les compresser. Et pour être sûr je les décompresse avec un utilitaire autre. Pas de problème tout baigne.

    Maintenant, pour des raisons de temps d'upload, je voudrais envoyer mes fichiers compressés, mais pour pas me faire ch... hum, suer avec d'éventuels droits d'écriture, des systèmes étranges venant d'autres planètes, ou autre, j'aimerais compresser mes fichiers dans le même temps que je les envoie, sans passé par "je compresse mon fichier dans un répertoire bidon et j'envoie le fichier du répertoire bidon".
    Et là...

    J'ai l'impression que ce qu'il me faudrait c'est un gennre de InOutputStream, enfin un truc que je peux write en mémoire ou read vers le server FTP.
    Ou, mieux, au fur et à mesure, que je compresse mon fichier, je l'envoie au serveur.

    En tout cas tout nouvel angle de vue, et toutes suggestions sont les bienvenues.

    AsH.fr rouleau FTP.

    [EDIT]: pour l'instant j'envoie un truc qui semble être le fichier initial mais tronquée à la longueur du fichier compressé.

  2. #2
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    Tu peux utiliser la librairie java.util.zip qui te permettra de compresser/décompresser les fichiers directement dans ton code.

  3. #3
    Membre averti
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Par défaut
    hum... j'ai manqué de précision, effectivement. Mon transfert de fichier ET ma compression sont faite en java, la compression étant effectivement faite grâce à la librairie java.util.zip.

    Ce que j'aimerais c'est pouvoir compresser et uploader sans passer par un accès à un disque dur, donc sans "poser" mon outputStream.

    La classe FtpConnection

    Ma class pour compresser un fichier, simple, classique:
    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
    public static boolean compress(String iFilename, String oFilename){
            try {
     
                FileInputStream fis = new FileInputStream(iFilename);
                GZIPOutputStream gos = new GZIPOutputStream(new FileOutputStream(oFilename));
     
                File file = new File(iFilename);
                Long longueur = new Long(file.length());
                int i = longueur.intValue();
     
                byte[] byt = new byte[i] ;
                int offset;
                while ((offset = fis.read(byt)) > 0) 
                    gos.write(byt, 0, offset); 
     
                fis.close();
                gos.close();            
     
                return true;
            } 
            catch (IOException e) {
                e.printStackTrace();
                return false;
            }
        }
    Ma classe de transfert FTP, celle qui s'occupe d'effectivement écrire le fichier en upload:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        private void transferData(InputStream in, StringBuffer sb) throws IOException
        {		
            byte b[] = new byte[BLOCK_SIZE];
            int amount;
     
            // Stock les donnés dans un buffer
            while ((amount = in.read(b)) > 0)
            {
                sb.append(new String(b, 0, amount));
                bytes_total += amount;
            }
        }

    Ma class qui est censé faire les deux en même temps:
    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
    27
    28
    29
    30
    31
    32
    33
        public boolean transferDataCompress(InputStream in, GZIPOutputStream out){
            GZIPOutputStream gos;
            System.out.println("COMPRESS : IN = "+in.toString()); 
            try {
                gos = new GZIPOutputStream(out);
                byte[] byt = new byte[BLOCK_SIZE] ;
                int offset;
                while ((offset = in.read(byt)) > 0) 
                    gos.write(byt, 0, offset); 
     
                byte b[] = new byte[BLOCK_SIZE];
                int amount;
                /*
                while ((amount = gos.read (b)) > 0)
                {
                        out.write(b, 0, amount);
                        bytes_total += amount;
    System.out.println("bytes_total : "+bytes_total);
                }*/
    System.out.println("debut close");
                in.close();
    System.out.println("  IN close");
                out.close();            
    System.out.println("  OUT close");
                gos.close();            
    System.out.println("  GOS close");
     
                return true;
            } 
            catch (IOException e) {
                e.printStackTrace();
                return false;
            }
    ceci étant ma dernière tentative...

    AsH.fr aspirant clareté

  4. #4
    Membre averti
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Par défaut
    Bon, je pense que j'ai trouvé pourquoi ça merdouille (enfin une raison valable, quoi) : la classe Socket renvoi un OutputStream: public OutputStream getOutputStream()

    Donc, plein d'espoir (et avec des étoiles plein les yeux) j'ai essayé de d'étendre la classe Socket en SocketGZIP et de définir public GZIPOutputStream getGZIPOutputStream() car là, ça (apparement) résoudrait mon problème avant même qu'il existe. Hors un saloperie de SocketImpl impl; dans Socket, me fait la misère quand je veux extends ma classe. "Cannot find symbol" pour le setImpl(), impl "is not public", et le getImpl() n'existe pas.
    M'aurait-on menti quand on m'a dit qu'on pouvait prendre n'importe quel objet et lui rajouter/surcharger des fonctions ?
    Ou alors je devrait utiliser pas extends mais autre chose, et c'est là que le bas blesse.

    Merci à ceux qui m'auront compris, et je sais que ce n'ai pas simple, d'éclairer ma lanterne.

    AsH.fr n'incompris

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 75
    Par défaut
    D'apres la doc c'est SocketImpl qu'il faut herité et dans Socket tu peut choisir ta factory de SocketImpl.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/03/2008, 16h54
  2. [FTP] Problème pour uploader un fichier
    Par Crazyblinkgirl dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 07/01/2008, 22h21
  3. [Gzip] - Débutante - problème compression/decompression.
    Par Maya_vega dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 17/07/2007, 17h48
  4. FTP limiter l'upload
    Par kietsu dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 15/09/2006, 09h44
  5. [ftp] problème d'upload
    Par FFF dans le forum Serveurs (Apache, IIS,...)
    Réponses: 1
    Dernier message: 21/12/2005, 09h05

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