Transfert incomplet de fichier via une servlet
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:
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:
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) :cry:.
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