Bonjour à tous, j'ai un problème lié à l'utilisation de Reponse.BinaryWrite sous Internet Explorer 6.0.
Voici une petite explication :
Afin d'éviter les PostBack sur un site Web, j'ai créé une page "VoirFichier.aspx" permettant à l'utilisateur de télécharger des fichiers contenus dans une base de données SQL Server.
Ainsi pour tout lien vers un fichier en base de données, j'appelle une méthode JavaScript qui va ouvrir la page "VoirFichier.aspx" dans une popup en lui passant des paramètres dans l'URL.
Dans le code behind de la page (VoirFichier.aspx.cs), je récupère les données binaires du fichier correspondant aux paramètres passés dans l'URL.
Bon jusque là tout va bien j'ai récupéré toutes les infos du fichier j'effectue donc mon BinaryWrite de la manière suivante :
En localhost ceci marche très bien que ce soit sous IE 6.0, IE 7.0, Firefox 2.0...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Response.ContentType = /*type du fichier, "application/pdf" en général*/; Response.AppendHeader("Content-Disposition", "attachment; filename = /*nom du fichier*/ "); Response.AppendHeader("Content-Length", /*taille du fichier*/); Reponse.BinaryWrite(/* fichier binaire sous la forme byte[] */);
En revanche sur le serveur de production cela marche sous IE 7.0 et FireFox 2.0 mais pas sous IE 6.0. On récupère bien un fichier de la bonne taille et marqué comme étant du bon type mais il se nomme toujours "VoirFichier.aspx" ou au mieux "VoirFichier.pdf" pour les fichiers pdf par exemple.
En effectuant déjà des recherches, j'ai vu que IE 6.0 gérait parfois mal les headers trop long et que raccourcir le nom du fichier pouvait remédier au problème. J'ai effectué beaucoup de modifications mais jamais rien n'a résolu mon problème. Voici quelques modifs que j'ai pu faire :
- nom de fichier avec une seule lettre (ex : t.pdf)
- suppression de l'header "Content-Length"
- ajout de Response.Clear() et Response.ClearHeader() et Response.ClearContent() en tout début
- ajout de Reponse.Flush() et/ou de Response.End() ou en toute fin
- exécution du BinaryWrite dans le OnInit ou dans le PreRender de la page
...
Rien n'y a fait IE 6.0 ne veut pas prendre le bon nom de fichier. Je ne sais plus comment remédier au problème et je ne sais vraiment pas d'où il vient :
- problème de config serveur?
- problème de IE 6.0?
- problème de code?
J'espère que vous pourrez m'aider car je n'ai plus de solutions pour le moment.
Partager