web-dev-qa-db-fra.com

Fichier d'écriture C # Asp.net sur le client

J'espère que c'est une question rapide, j'espère. J'ai besoin de rédiger des rapports et de 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 je l'ai envoyé au client via l'objet Response.

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 sur le serveur Web et de passer directement d'un objet qui représente le document à la réponse?

27
jim

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");

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

28
Nikos Steiakakis

Vous pouvez.

Essaye ça:

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

17
Ganesh R.

Oui.

page.Response.WriteFile(yourData, 0, yourData.Length);
5

La réponse exacte à la question dépend de la façon dont votre rapport est organisé (c'est-à-dire à quel "objet" vous faites référence). Si vous avez une seule chaîne, vous pouvez utiliser Response.Write pour l'écrire simplement. Si vous avez besoin d'un TextWriter, Response.Output est ce que vous voulez - de cette façon, vous pouvez ignorer l'écriture sur le disque, puis utiliser WriteFile. De plus, si votre contenu est binaire, vous pouvez utiliser Response.OutputStream pour cela.

Vous pouvez également définir Response.AddHeader ("Content-Disposition", "attachment"), si vous souhaitez que l'utilisateur voit une boîte de dialogue d'enregistrement de fichier. Cependant, Content-Disposition n'est pas nécessairement respecté, de sorte que l'utilisateur peut toujours ouvrir le rapport directement dans le navigateur. N'oubliez pas de définir des en-têtes avant de publier le contenu réel!

En outre, selon le format du rapport, vous souhaiterez peut-être définir Response.ContentType sur quelque chose de approprié, tel que text/plain, text/csv ou tout ce que vous avez. Les types de mime corrects sont répertoriés sur le site IANA .

5
Jouni Heikniemi