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 :
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();
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
 
// 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);
}
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) .

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