Frage

Ich hoffe, dass dies eine schnelle Frage ist, wie ich hoffe. Ich brauche einige Berichte zu schreiben und dann den Benutzer es zu ihrem / seinem lokalen Rechner zu speichern aufgefordert werden. Das letzte Mal, als ich das tat, schrieb ich eine Datei auf den Webserver und dann schickte sie an den Client über Response Objekt.

auf dem Webserver erstellen

            TextWriter tw = new StreamWriter(filePath);

In dem Client senden

           page.Response.WriteFile(path);

Die Frage ist: Gibt es eine Möglichkeit, das Schreiben der physischen Datei auf den Webserver und gehen Sie nach rechts von einem Objekt, das das Dokument an die Antwort darstellen zu überspringen?

War es hilfreich?

Lösung

Sie könnten die Response.ContentType wie folgt verwenden

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

Dies funktioniert natürlich, wenn Sie eine Textdatei geschrieben werden sollen. Falls Sie eine .doc zum Beispiel schreiben Sie die Content ändern zu „application / msword“ etc ...

Andere Tipps

Sie können.

Versuchen Sie folgendes:

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

Dies gibt den Benutzer Aufforderung zu öffnen oder test.xls Datei zu speichern. in ähnlicher Weise können Sie andere ASP.NET-Objekte anstelle der Tabelle liefern.

Ja.

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

Die genaue Antwort auf die Frage hängt davon ab, wie haben Sie Ihren Bericht organisiert (das heißt, was ist das „Objekt“ Sie sich beziehen). Wenn Sie eine einzelne Saite haben, können Sie Response.Write verwenden, um es einfach zu schreiben. Wenn Sie einen Textwriter benötigen, ist Response.Output, was Sie wollen - auf diese Weise Sie überspringen können auf die Festplatte zu schreiben und dann Writefile verwenden. Auch, wenn Ihr Inhalt ist binär passiert ist, Sie Response.OutputStream dafür verwenden könnten.

Sie können auch Response.AddHeader ( „Content-Disposition“, „attachment“) setzen, wenn Sie wollen, dass der Benutzer eine Datei speichern Dialog zu sehen. Allerdings Content-Disposition nicht notwendigerweise geehrt, so kann der Benutzer immer noch den Bericht geöffnet direkt im Browser bekommen. Denken Sie daran setzen Header, bevor Sie eine Ausgabe den eigentlichen Inhalt!

Auch je nach Format des Berichts, können Sie Response.ContentType etwas angemessen wie text / plain text / csv oder was auch immer haben Sie einstellen. Die richtigen Mime-Typen sind unter der IANA-Website aufgeführt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top