Bonjour,
je me suis apperçu d'un problème de téléchargement de fichier sur un serveur distant sur Internet Explorer. Ce que je ne comprends pas, c'est que ça fonctionne #1 avec FireFox. Et même, dans mon environnement de dévelopement, ça fonctionnait bien.
Je vous décrit le problème. J'ai un servlet qui produit un fichier CSV à partir d'une recherche dynamique dans une BD. Pour gagner de la rapidité, j'ai décider de streamer le fichier produit chez le client. Le gain de performance est énorme en pire cas. Quand j'essaie ma solution sur un serveur distant, l'ouverture du OutputStream est plus longue et cela fait en sorte que je perds l'information de l'entête de la réponse sous internet explorer. Au lieu de me retourner un fichier, il me retourne tout le contenu du fichier, comme si c'était une page HTML. Dans FireFox tout ce passe comme il faut.
Je ne comprend pas, j'ai même auguementé le délai d'expiration et cela ne change rien.
Code :
String fileName = "Resultat" +
(new SimpleDateFormat("yyyy_MM_dd_HH'h'mm")).format(new java.util.Date()) +
".csv";
// Set la date d'expiration
Date date = new Date();
date.setTime(date.getTime() + 180000);
response.setHeader("Expires", date.toString());
// Set IE extended HTTP/1.1 no-cache headers (use addHeader).
response.addHeader("Cache-Control", "post-check=0, pre-check=0");
if((request.getHeader("User-Agent").indexOf("NT 5.0") != -1) &&
(request.getHeader("User-Agent").indexOf("MSIE") != -1)) {
response.setContentType("text/csv;charset=utf-8");
response.setHeader("Content-Disposition",
"inline; filename=\"" + fileName + "\"");
} else {
response.setContentType("text/plain; charset=UTF-8");
response.setHeader("Content-Disposition",
"attachment; filename=\"" + fileName + "\"");
}
System.out.println("Output Stream ouvert ...");
OutputStream oStream = response.getOutputStream();
entete(buf, _formulaire);
oStream.write(buf.toString().getBytes());
oStream.flush();
....
Je ne comprends pas ce qui est incorrecte là dedans, puisqu'en locale, ça fonctionne.
Avez-vous des suggestions ?