Bonjour tout le monde .
Voilà, ma question porte sur quelque chose d'assez courant, le téléchargement d'un fichier texte.
Pour information, je récupère un MemoryStream et balance le tout dans un fichier txt.
Cela marche très bien lorsque je le fais sur la page en cours, sur clic d'un bouton, dans l'event Click de ce même bouton, je lance le code suivant:
Et donc le fichier est proposé au téléchargement.
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
23
24
25
26
27
28
29
30
31
32 //Obtenir le stream (type de fichier particulier dont je récupère le MemoryStream) MemoryStream stream = myFile.GetStream(); if (stream.Length > 0) { try { //On récupère le tableau de bytes byte[] arrayByte = stream.ToArray(); this.Response.Clear(); this.Response.ContentType = "application/vnd.text"; this.Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", fileName)); stream.WriteTo(page.Response.OutputStream); stream.Close(); //page.Response.End(); } catch (Exception ex) { throw ex; } finally { this.Response.End(); } } else { throw new Exception("Le fichier est vide !"); }
Seulement, il a fallu, pour des besoins particuliers, que j'agisse différemment.
En effet, je dois ouvrir une page à part qui va lancer le téléchargement.
Donc, sur clic de mon bouton, je lance l'ouverture d'une page via un window.open() généré dans un ScriptManager (j'ai un updatepanel sur ma page, mais même sans, c'est le même topo...), et je lance la méthode précisée plus haut.
Le problème est que, lors de l'affichage de la fenêtre de téléchargement, il me propose, non pas le fichier texte en tant que tel, mais la page aspx précédemment ouverte. Si je fais ouvrir, j'ai le texte du memorystream directement affiché dans la page, si je fais enregistrer, j'ai le message d'erreur suivant:J'ai bien essayé de changer mon code:Internet Explorer ne peut pas télécharger Popup.aspx.
Si vous avez des pistes, merci
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
23
24
25
26
27
28
29
30
31
32
33
34
35 //Obtenir le stream MemoryStream stream = myFile.GetStream(); if (stream.Length > 0) { try { //On récupère le tableau de bytes byte[] arrayByte = stream.ToArray(); stream.Close(); stream.Flush(); this.Response.Clear(); //this.Response.ContentType = "application/vnd.text"; this.Response.AddHeader("Content-Length", arrayByte.Length.ToString()); this.Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", fileName)); //stream.WriteTo(this.Response.OutputStream); this.Response.ContentType = "application/octet-stream"; this.Response.BinaryWrite(arrayByte); //this.Response.End(); } catch (Exception ex) { throw ex; } finally { HttpContext.Current.Response.End(); } } else { throw new Exception("Le fichier est vide !"); }
Partager