Frage

Ich habe eine Seite in meiner vb.net Web-Anwendung, die eine Reihe von Daten in eine Textdatei werfen muss und es dann zum Download für den Benutzer darstellen. Was ist der beste / effizienteste Weg, eine solche Textdatei auf einer .net Web-Server zu bauen?

Edit: eine Frage zu beantworten unten, das wird einen Download einmal sein, und dann Wegwerf-Art von Datei

.

Update: Ich klebte die Vorschläge von John Rudy und DavidK zusammen, und es funktionierte perfekt. Danke, alle!

War es hilfreich?

Lösung

Die Antwort hängt davon ab, ob, wie vergessene Semikolons erwähnt, Sie wiederholten Downloads benötigen oder einmal-und-fertig throwaways.

In beiden Fällen wird der Schlüssel sein, den Inhaltstyp des Ausgangs zu setzen, um sicherzustellen, dass ein Download-Fenster angezeigt werden. Das Problem mit geraden Textausgabe ist, dass der Browser die Daten in einem eigenen Fenster angezeigt wird versuchen.

Der Kern Weg, um den Inhaltstyp zu setzen, etwas ähnlich der folgenden sein würde, dass der Text unter der Annahme, ist die Ausgabezeichenfolge und den Dateinamen der Standardname ist wollen Sie die Datei (lokal) gespeichert werden, wie.

HttpResponse response = HttpContext.Current.Response;
response.Clear();
response.ContentType = "application/octet-stream";
response.Charset = "";
response.AddHeader("Content-Disposition", String.Format("attachment; filename=\"{0}\"", filename));
response.Flush();
response.Write(text);
response.End();

Dies wird einen Download für den Benutzer auffordern.

Jetzt wird es schwieriger, wenn Sie buchstäblich brauchen, um die Datei auf Ihrem Webserver zu speichern - aber nicht schrecklich so. Es werden Sie den Text zu Ihrer Textdatei, die Klassen in System.IO verwenden zu schreiben. Stellen Sie sicher, dass der Pfad, den Sie schreiben, die vom Netzwerkdienst, IUSR_MachineName und ASPNET Windows-Benutzer beschreibbar ist. Ansonsten gleichen Deal -. Verwendung Content-Typ und Header-Download, um sicherzustellen,

würde ich empfehlen, buchstäblich nicht die Datei zu speichern, es sei denn Sie brauchen - und selbst dann die Technik der so direkt auf dem Server zu tun ist vielleicht nicht die richtige Idee. (EG, was passiert, wenn Sie Zugriffskontrolle benötigen zum Herunterladen der Datei? Nun würden Sie tun müssen, dass außerhalb der App Wurzel, die nicht einmal möglich sein kann oder auch auf Ihrer Hosting-Umgebung abhängig.)

Also, ohne zu wissen, ob Sie in einer einmaligen sind oder Modus Datei-Must-wirklich-speichern und ohne Auswirkungen auf die Sicherheit zu wissen, (die Sie wahrscheinlich selbst ausrechnen müssen, wenn Sie wirklich serverseitige benötigen spart) , das ist über die beste kann ich Ihnen geben.

Andere Tipps

ein String Verwenden Sie den Text der Datei zu erstellen, und es dann senden den Benutzer unter Verwendung von Content-Disposition.

Beispiel finden Sie hier: http://www.eggheadcafe.com/community/ aspnet / 17/76432 / use-the-contentdispositi.aspx

private void Button1_Click(object sender, System.EventArgs e)
{
        StringBuilder output = new StringBuilder;
        //populate output with the string content
        String fileName = "textfile.txt";

        Response.ContentType = "application/octet-stream";
        Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
        Response.WriteFile(output.ToString());

}

Sie bauen es überhaupt nicht, verwenden Sie ein Httphandler und dienen der Textdatei den Ausgabestrom direkt in:

http://digitalcolony.com/labels/HttpHandler.aspx

Der Codeblock auf halbem Weg nach unten ein gutes Beispiel ist, können Sie Ihre eigenen anpassen:

public void ProcessRequest(HttpContext context)
{
   response = context.Response;
   response.ContentType = "text/xml";       
   using (TextWriter textWriter = new StreamWriter(response.OutputStream, System.Text.Encoding.UTF8))
   {
       XmlTextWriter writer = new XmlTextWriter(textWriter);
       writer.Formatting = Formatting.Indented;
       writer.WriteStartDocument();
       writer.WriteStartElement("urlset");
       writer.WriteAttributeString("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
       writer.WriteAttributeString("xsi:schemaLocation", "http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd");
       writer.WriteAttributeString("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9");

       // Add Home Page
       writer.WriteStartElement("url");
       writer.WriteElementString("loc", "http://example.com");
       writer.WriteElementString("changefreq", "daily");
       writer.WriteEndElement(); // url

       // Add code Loop here for page nodes
       /*
       {
           writer.WriteStartElement("url");
           writer.WriteElementString("loc", url);
           writer.WriteElementString("changefreq", "monthly");
           writer.WriteEndElement(); // url
       }
       */
       writer.WriteEndElement(); // urlset
   }                      
}

Beachten Sie es nicht immer eine ‚Datei‘ auf der Serverseite sein müssen. Es ist der Client, der es in eine Datei verwandelt.

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