Bonjour à tous,
je remets sur le tapis un problème qui a l'air récurant
( cf. http://www.developpez.net/forums/sho...nsfert+fichier) mais qui n'a jamais trouvé vraiment de réponse dans les post que j'ai pus parcourir.
Il s'agit de transférer un fichier PDF à l'aide d'une servlet :
Je récupère le fichier avec le client java suivant :
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 // Lecture du fichier sur le FS du serveur File file = new java.io.File(lsOutputRootDir + lsNomFichierResult); FileInputStream lFileInputStream = new FileInputStream(file); BufferedInputStream bis = new BufferedInputStream(lFileInputStream); int bytes = (int) file.length(); byte[] buffer = new byte[bytes]; int readBytes = bis.read(buffer); bis.close(); lFileInputStream.close(); // Controle de la lecture du fichier cLogger.debug("Nb d'octets du fichiers :"+bytes+" Nb octets lus :"+readBytes); // Envoie du fichier dans la reponse HTTP pResponse.setContentType("application/pdf"); pResponse.setHeader("Content-disposition", "inline; filename=" + lsNomFichierResult); pResponse.setContentLength(buffer.length); final ServletOutputStream stream = pResponse.getOutputStream(); stream.write(buffer, 0, readBytes); stream.flush(); stream.close();
Ce code marche dans 80% des cas, et dans 20% le nombre d'octet reçu est inférieur à celui envoyé (et le fichier est incomplet)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 // Lecture sur la socket HTTP lUrl = new URL(lUrlString); lConnexion = lUrl.openConnection(); lBuffer = new byte[lConnexion.getContentLength()]; lInputStream = lConnexion.getInputStream(); lNbOctetLu = lInputStream.read(lBuffer); lInputStream.close(); // Controle if (lNbOctetLu != lConnexion.getContentLength()) { throw new Exception("Le fichier est incomplet : nb octets envoyés="+lConnexion.getContentLength()+", nb octets lus="+lNbOctetLu); }.
Je ne vois pas d'erreur dans le code, et je commence un peu à sécher.
Peut-être un problème de configuration du serveur d'application (WAS 4)? Un problème réseau? Quelqu'un a une idée? je suis preneur!
Merci
Partager