Zum Inhalt springen

ASP.NET Datei-Download - Fragen


Empfohlene Beiträge

Geschrieben

Hallo,

ich habe hier eine ASP.NET (3.5) Seite, auf der ein Grid angezeigt wird.

Ich habe nun die Anforderung, dass aus dem Inhalt des Grids eine Batch Datei generiert werden soll, die der User dann herunterladen kann.

Das Erstellen der Datei und funktioniert wunderbar. Der Download klappt auch soweit, allerdings stosse ich hier auf eine kleine Schwierigkeit,

bei der ich gerade nicht weiter weiß.

Hier erstmal der Code


            string fileName = Server.MapPath("Stapel.bat");

            System.IO.FileInfo fInfo = new System.IO.FileInfo(fileName);

            fInfo.Delete();

            object oDS = this.Session["data"];

            DataSet ds;

            if (oDS != null && oDS is DataSet) {

                ds = (DataSet)oDS;

                StreamWriter sWriter = new FileInfo(Server.MapPath("Stapel.bat")).CreateText();

                foreach (DataRow o in ds.Tables[0].Rows) {

                    sWriter.WriteLine("call clb " + o[0].ToString());

                }

            }

            Response.AddHeader("Content-Disposition", "attachment; filename=" + fInfo.Name);

            Response.AddHeader("Content-Length", fInfo.Length.ToString());

            Response.ContentType = "application/octet-stream";

            Response.WriteFile(fInfo.FullName);

            Response.End();

Mir ist aufgefallen, dass
StreamWriter sWriter = new FileInfo(Server.MapPath("Stapel.bat")).CreateText();

die Datei in mein Projektverzeichnis ablegt. Ich weiß nicht wie der Pfad auf dem Server aussehen würde, allerdings liegt hier gerade mein Problem.

Dadurch, dass die Datei dort in dem Pfad gespeichert wird, kann es passieren, dass 2 Benutzer gleichzeitig auf den Pfad zugreifen wollen.

Das ist natürlich alles andere als schön, allerdings fällt mir im Moment keine gescheite Lösung für das Problem ein.

Ich hatte schon überlegt einen Ordner (Zufallszahl) anzulegen, allerdings ist dann das Löschen der Datei beim Beenden der Sitzung etwas schwieriger.

Dafür gibt es doch bestimmt eine elegantere Lösung?!

Hat jemand von euch vielleicht nen Tip für mich?

  • 2 Wochen später...
Geschrieben

Ok,

ich habe eine Lösung gefunden.

Ich habe eine Global.asax Datei erstellt.

In der Methode Session_Start lege ich nun den Ordner mit der ID an und speicher mir den absoluten Pfad in einer Session Variable.

Analog dazu hol ich mir in der Session_End Methode den Pfad aus der Session Variable heraus und lösche das Verzeichnis mit der absoluten Pfadangabe.

Server.MapPath kann man leider nicht in der Session_End Methode verwenden, deswegen muss ich den Schritt mit der absoluten Pfadangabe machen.

Gruß

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...