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 :
- MultipartParser mParser = new MultipartParser(request, 1024*1024); // 1 Mo maxsize
- Part part = null;
- ParamPart paramPart = null;
- while ((part = mParser.readNextPart()) != null) {
- // rechercher le paramètre de type file
- if (part.isFile()) {
- InputStream inputStream = ((FilePart)part).getInputStream();
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- int n;
- byte[] ch = new byte[1024];
- while((n = inputStream.read(ch,0,1024)) > 0) {
- baos.write(ch,0,n);
- }
- byte[] tab = baos.toByteArray();
- InputStream is = new ByteArrayInputStream(tab);
- ImageInfo iInfo = new ImageInfo();
- iInfo.setInput(is);
- iInfo.setDetermineImageNumber(true);
- boolean b = iInfo.check();
- int w = iInfo.getWidth();
- int h = iInfo.getHeight();
- }
- }
|
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 !!!
Quelqu'un pourrait-il m'expliquer please ??
---------------