C# Asp.net écrire le fichier au client

J'espère que c'est une question rapide, je l'espère. J'ai besoin d'écrire des rapports et ensuite demander à l'utilisateur de l'enregistrer sur sa machine locale. La dernière fois que j'ai fait cela, j'ai écrit un fichier sur le serveur web, puis l'ai envoyé au client via Response object.

À créer sur le serveur web

            TextWriter tw = new StreamWriter(filePath);

À envoyer au client

           page.Response.WriteFile(path);

La question Est, existe-t-il un moyen de sauter l'écriture du fichier physique vers le serveur web et d'aller directement à partir d'un objet qui représente le document pour la réponse?

26
demandé sur jim 2009-07-02 10:37:00

4 réponses

Vous pouvez utiliser la Réponse.ContentType comme ceci

Response.ContentType = "text/plain";
Response.OutputStream.Write(buffer, 0, buffer.Length);
Response.AddHeader("Content-Disposition", "attachment;filename=yourfile.txt");

Cela fonctionne bien sûr si vous voulez écrire un fichier texte. Dans le cas où vous voulez écrire un .doc par exemple, vous changez le ContentType en "application / msword" etc...

27
répondu Nikos Steiakakis 2013-02-06 10:45:35

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 test.fichier xls. de même vous pouvez fournir d'autres ASP.NET objets à la place de la Table.

16
répondu Ganesh R. 2009-07-02 07:26:03

Oui.

page.Response.WriteFile(yourData, 0, yourData.Length);
5
répondu Sani Singh Huttunen 2009-07-02 06:46:48

La réponse exacte à la question dépend de la façon dont vous organisez votre rapport (c'est-à-dire quel est "l'objet" auquel vous faites référence). Si vous avez une seule chaîne,vous pouvez utiliser Response.Écrire pour écrire. Si vous avez besoin D'un TextWriter, réponse.La sortie est ce que vous voulez - de cette façon, vous pouvez ignorer l'écriture sur le disque, puis en utilisant WriteFile. En outre, si votre contenu était binaire, Vous pouvez utiliser Response.OutputStream pour cela.

Vous pouvez également définir Réponse.AddHeader ("Content-Disposition"," pièce jointe"), si vous voulez que l'utilisateur voit une boîte de dialogue Enregistrer le fichier. Cependant, la Disposition du contenu n'est pas nécessairement respectée, de sorte que l'utilisateur peut toujours ouvrir le rapport directement dans le navigateur. N'oubliez pas de définir les en-têtes avant de sortir le contenu réel!

En outre, selon le format du rapport, vous pouvez définir la réponse.ContentType à quelque chose d'approprié tel que text / plain, text / csv ou tout ce que vous avez. Les types mime corrects sont le site de L'IANA est listé sur .

5
répondu Jouni Heikniemi 2009-07-02 06:49:09