C # Asp.net écrire le fichier au client
Question
J'espère que c'est une question rapide, je l'espère. Je dois écrire des rapports et ensuite l'utilisateur invité à enregistrer à son / sa machine locale. La dernière fois que je l'ai fait je l'ai écrit un fichier au serveur Web, puis envoyé au client par l'intermédiaire objet Response
.
pour créer sur le serveur Web
TextWriter tw = new StreamWriter(filePath);
pour envoyer au client
page.Response.WriteFile(path);
La question est, est-il un moyen d'ignorer l'écriture du fichier physique au serveur Web et allez à droite d'un objet qui représente le document à la réponse?
La solution
Vous pouvez utiliser le Response.ContentType comme ceci
Response.ContentType = "text/plain";
Response.OutputStream.Write(buffer, 0, buffer.Length);
Response.AddHeader("Content-Disposition", "attachment;filename=yourfile.txt");
Bien sûr, cela ne fonctionne que si vous voulez écrire un fichier texte. Si vous voulez écrire un .doc par exemple, vous modifiez le ContentType à « application / msword » etc ...
Autres conseils
Vous pouvez.
Essayez ceci:
Table oTable = new Table();
//Add data to table.
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment;filename="test.xls"");
Response.Charset = "";
this.EnableViewState = false;
System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
System.Web.UI.Html32TextWriter oHtmlTextWriter = new System.Web.UI.Html32TextWriter(oStringWriter);
0Table.RenderControl(oHtmlTextWriter);
Response.Write(oStringWriter.ToString());
Response.End();
Cela donnera invite l'utilisateur à ouvrir ou enregistrer le fichier test.xls. De même, vous pouvez fournir d'autres objets ASP.NET en place du tableau.
Oui.
page.Response.WriteFile(yourData, 0, yourData.Length);
dépend de la façon dont avez-vous organisé votre rapport La réponse exacte à la question (à savoir ce qui est le vous « objet », en référence à). Si vous avez une seule chaîne, vous pouvez utiliser Response.Write pour écrire juste. Si vous avez besoin d'un TextWriter, Response.Output est ce que vous voulez - cette façon, vous pouvez ignorer l'écriture sur le disque, puis en utilisant WriteFile. De plus, si votre contenu est arrivé à être binaire, vous pouvez utiliser Response.OutputStream pour cela.
Vous pouvez également définir Response.AddHeader ( « Content-Disposition », « pièce jointe »), si vous voulez que l'utilisateur une boîte de dialogue Enregistrer le fichier. Cependant, Content-Disposition est pas nécessairement honorée, afin que l'utilisateur peut encore obtenir le rapport ouvert directement dans le navigateur. Rappelez-vous de définir les en-têtes avant la sortie du contenu réel!
En outre, selon le format du rapport, vous pouvez définir Response.ContentType à quelque chose approprié tel que text / plain, text / csv ou tout ce que vous avez. Les types MIME appropriés sont répertoriés à le site IANA .