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?

Était-ce utile?

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 .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top