[Java] Pbr récupération d'un InputStream a partir de lib COS....

Pbr récupération d'un InputStream a partir de lib COS.... [Java] - Java - Programmation

Marsh Posté le 06-08-2002 à 12:00:27    

:hello:
 
J'ai écris une servlet histoire de pouvoir récupérer un fichier à partir d'un formulaire HTML (et input type="file" )
 
Les librairies COS me permettent de soit uploader ce fichier pour le copier sur mon serveur, soit de récupèrer un InputStream dessus...
C la seconde solution qui m'intéresse pour pouvoir le stocker en BD par la suite..
 
J'utilise de plus la classe ImageInfo pour récupèrer différentes infos comme width, height si le fichier en entrée est une image...
 
 
Voici mon code..
(en rouge, la partie "totalement débile mais qui fait que mon code fonctionne..."  :??:  
 
 

Code :
  1. MultipartParser mParser = new MultipartParser(request, 1024*1024); // 1 Mo maxsize
  2.         Part part = null;
  3.         ParamPart paramPart = null;
  4.         while ((part = mParser.readNextPart()) != null) {
  5.             // rechercher le paramètre de type file
  6.             if (part.isFile()) {
  7.                 InputStream inputStream = ((FilePart)part).getInputStream();
  8.                 ByteArrayOutputStream baos = new ByteArrayOutputStream();
  9.    int n;
  10.    byte[] ch = new byte[1024];
  11.    while((n = inputStream.read(ch,0,1024)) > 0) {
  12.              baos.write(ch,0,n);
  13.    }
  14.          byte[] tab = baos.toByteArray();
  15.          InputStream is = new ByteArrayInputStream(tab);
  16.                 ImageInfo iInfo = new ImageInfo();
  17.                 iInfo.setInput(is);
  18.                 iInfo.setDetermineImageNumber(true);
  19.                 boolean b = iInfo.check();
  20.                 int w = iInfo.getWidth();
  21.                 int h = iInfo.getHeight();
  22.   }
  23.  }


 
 
J'ai grosso-modo fait du copier-coller sur les exemples, ce code devrait donc fonctionner...
 
 
Le pbr est que, si je récupère un InputStream à partir du FilePart et que je l'envoi a ImageInfo, celui ci me dit que ce n'est pas une image valide... (b = false)
Pour que cela fonctionne, je suis obligé de lire le contenu de InputStream, de le copier dans un tableau de bytes et de regénérer un nouvel InputStream a partir de ce tableau de bytes..
C totalement débile mais là, ca fonctionne !!!  :hap:  
 
Quelqu'un pourrait-il m'expliquer please ??
 :jap:  


---------------

Reply

Marsh Posté le 06-08-2002 à 12:00:27   

Reply

Marsh Posté le 06-08-2002 à 12:06:44    

bin c'est simple. Un inputstream c'est quoi? C'est un flux de données qui t'arrive en entrée. Lorsque tu récupères un inputstream tu n'as qu'un "tuyau" vers les données elles meme. Je veux dire que l'inputstream en lui meme ne contient pas les données mais c'est un moyen d'y accéder (et de les copier dans un fichier, sur disque, etc)
 
Il faut voir ce que image info fait mais la solution la plus probable est que la longueur du fichier n'est pas setté au niveau du client. Et donc ce que tu fais dans ce cas là c'est lire jusqu'à ce que tu recoives un évenement de fin de fichier (c'est ce qui apparait parfois qd tu veux télécharger un ficher et que ton browser te met unkown length au lieu de la taille du fichier à descendre).
 
Donc voilà c'est pour ca. Remarque que si tu fais ca depuis un fichier local sur ton disque et que tu passes le stream ca doit fonctionner sans probleme


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 06-08-2002 à 12:21:46    

Encore une fois  :jap: mister DarkLord..
Merci pour ta réponse ultra-rapide et compréhensible..
 
C vraiment logique quand on lit l'explication..
Encore une fois..  
 :jap:  


---------------

Reply

Marsh Posté le 06-08-2002 à 12:23:48    

de rien de rien :)


---------------
Just because you feel good does not make you right
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed