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

Java Discussion :

Comment envoyer plusieurs images a un serveur?


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 16
    Par défaut Comment envoyer plusieurs images a un serveur?
    Bonjour,

    j'ai des image a envoyer un serveur (output).

    Mon problème se situe au moment ou j'ai un "java heap space" mais je ne dois pas augmenter la taille de la jvm. Pour être plus précis il ne plante pas à la première image, pourtant je fais un flush, un close et j'envoi 1 seule image en même temps... je ne sais pas pourquoi il garde en mémoire (je crois que c'est des int[] qui stocke les images) jusqu'au javaheapspace.

    J'ai essayer d'envoyer des ImagesIcon, des Images en buffer(byte[]). Dans le second cas j'ai un "java heap space" pendant la transformation avant mon envoi.

    Y'a t-il d'autres solution pour que j'envoi des images ou si je peux faire autre chose pour vider les images de la mémoire? est-ce possible?

    Merci.

    Cédric

    ps:s'il faut d'autres info...

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Un peu de code est nécessaire pour voir ce qui est fait.
    Première remarque : il n'est pas nécessaire de mettre en mémoire l'image avant de l'envoyer, pourquoi ne pas écrire directement le flux vers le serveur ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 16
    Par défaut
    Voici mes 2 solutions de départ:

    1) Pour la première solution en dessous j'ai une "Imageicon" dans un object java (je ne sais pas s'il caut mieux pas stocker une "Image" plutot qu'une "Imageicon").
    Je veux ensuite l'envoyer vers le serveur.

    Plante parfois au "writeObject"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Code=
    ObjectOutputStream out=new ObjectOutputStream(conn.getOutputStream());
    out.writeObject(pj.getImageIcon());
    out.flush();
    out.close();
    2) Pour la 2ème solution je passe par un BufferedImage

    Plante parfois pendant la transformation du BufferedImage

    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
    Code=
    ObjectOutputStream dos = new ObjectOutputStream( conn.getOutputStream());
    //File file=new File
    ByteArrayOutputStream bas =
    new ByteArrayOutputStream();
    ImageIO.write(pj.getBufferedImage(), "jpeg", bas);
    byte[] buffer = bas.toByteArray();
    dos.writeInt(buffer.length);
    int readLength=0;
    while ((readLength < buffer.length)) {
            if(buffer.length>=readLength+2048)
            	dos.write(buffer, readLength, 2048);
            else
            	dos.write(buffer, readLength, buffer.length-readLength);
            dos.flush(); 
            readLength+=2048;
    }
    bas.flush();
    bas.close();
    dos.close();

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Tu ne devrais pas sérializer tes images. Considère l'image comme un simple fichier, et transmet le flux vers le serveur. Tu pourras ainsi transmettre des images de tailles aléatoires, même si elles font plusieurs giga-octets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    InputStream input = ...ouverture fichier image...;
    OutputStream out = ...flux écriture vers serveur...;
    byte[] tab = new byte[ 1024 * 1024 ];
    int taille = 0;
     
    while( ( taille = input.read( tab ) ) > 0 )
    {
      out.write( tab, 0, taille );
    }
    ...
    fermeture des flux;
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 16
    Par défaut
    Merci, je vais essayer je pense que ta solution est la seule possible...

    Par contre j'ai oublier un gros détail, c'est que l'image que j'ai ne proviens pas d'un fichier mais soit d'un import, soit d'un scanner. Faut que je créer l'input (fiechier), en espérant que je n'ai pas le problème à ce niveau.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 16
    Par défaut
    Désolé pour les questions mais je n'arrive pas trop a faire les transformations.

    Pouvez vous me dire comment faire pour avoir:

    - Image --> Fichier

    - InputStream du Fichier --> Image

    Merci

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

Discussions similaires

  1. Comment envoyer mes images dans MySQL(PHP4)
    Par Charlie de Bolton dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 27/03/2007, 01h11
  2. Réponses: 14
    Dernier message: 14/03/2007, 19h32
  3. Réponses: 3
    Dernier message: 19/09/2006, 15h36
  4. [PHP-JS] charger plusieurs images sur le serveur
    Par ehmppowa dans le forum Langage
    Réponses: 4
    Dernier message: 13/12/2005, 16h22

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